Build the graph.
Watch it work.
A focused, twelve-level journey through GraphQL, resolvers, DynamoDB, authorization, pipelines, and realtime. Every line changes a live system—no AWS account required.
GraphQL field
pokemon(id: $id)
AppSync resolver
request(ctx)
DynamoDB
GetItem · id 025
Typed response
Pikachu
Core journey
One concept at a time
Start with a visible request and finish with a private realtime feed. Advanced architecture waits until the foundation feels natural.
Meet the AppSync League
Put the four request-flow stages in order: schema, resolver, data source, response.
Open the Pokédex
Return name, type, and habitat from pokemon.
Pack a query variable
Declare $id and pass it into pokemon.
Shape the Pokémon schema
Make id and name non-null and add the typed pokemon lookup.
Register a new Pokémon
Pass PokemonInput to registerPokemon and request id, name, and capturedAt.
Wire a DynamoDB resolver
Send GetItem with an encoded id key, then return the data-source result.
Handle resolver results
Append a NOT_FOUND error when ctx.result is empty, then return the result.
Turn the Pokédex page
Forward limit and nextToken into the Query request, then return the result.
Choose an authorization mode
Allow IAM-authorized AWS administrators to call resetLeague.
Build a resolver pipeline
Store trainerId in stash before the functions run and return the last function result afterward.
Broadcast an evolution
Subscribe onEvolution to evolvePokemon.
Filter the evolution feed
Return a NONE request payload, then filter trainerId to the caller's Cognito sub.
Elective leagues
Go deeper when you are ready
GraphQL modeling, integrations, operations, and production delivery remain available without interrupting the core learning staircase.

Sinnoh Graph Academy
Model expressive graphs without losing cost control · 4 challenges
ExploreClose
Sinnoh Graph Academy
Model expressive graphs without losing cost control · 4 challenges
Build a reusable Pokédex card
Reuse one field set across multiple Pokémon, rename results for the client, and identify concrete response types.
Classify every encounter
Model shared identity, closed categories, and results that may take more than one concrete shape.
Defeat the N+1 swarm
A nested resolver receives one parent in ctx.source; it does not receive every parent automatically. Redesign the parent request to fetch known partner keys together.
Set query power limits
Flexible queries need service-enforced depth and resolver-count limits; merely requiring a page argument does not cap its value.

Unova Integration Circuit
Connect Lambda, HTTP, search, events, and files safely · 4 challenges
ExploreClose
Unova Integration Circuit
Connect Lambda, HTTP, search, events, and files safely · 4 challenges
Configure a Lambda expedition
BatchInvoke belongs in resolver code, while maximum batch size belongs on the AppSync resolver resource.
Sign a protected AWS route
SigV4 belongs to the HTTP data-source configuration, never inside resolver code or hard-coded headers.
Match data to its natural habitat
Choose a direct integration based on access pattern rather than placing every workload behind Lambda.
Transfer a Pokédex photo safely
Keep large binary files outside GraphQL while authorizing uploads and storing durable file metadata.

Master Operations League
Cache, observe, deploy, and choose production controls · 4 challenges
ExploreClose
Master Operations League
Cache, observe, deploy, and choose production controls · 4 challenges
Tune the API cache
Cache stable species data with an argument-aware key while leaving rapidly changing battle resolvers unconfigured.
Watch the League
Configure real AppSync observability controls without recording verbose request and response content in production logs.
Deploy the League with CDK
Make the GraphQL API reproducible by defining its schema, authorization, and logging in infrastructure code.
Choose GraphQL or AppSync Events
Finish the League by choosing typed GraphQL subscriptions for domain data and AppSync Events for pure PubSub channels.

Champion Operations League
Secure, compose, test, and evolve production APIs · 4 challenges
ExploreClose
Champion Operations League
Secure, compose, test, and evolve production APIs · 4 challenges
Fortify the public Gym
Apply real AppSync API controls, while recognizing that WAF rate limiting remains a separate Web ACL resource.
Unite regional Pokédex teams
Let independent teams own source APIs while presenting clients with one composed AppSync endpoint.
Keep the Pokédex online
Production clients must survive expired cursors, dropped WebSockets, duplicates, and out-of-order events.
Deploy the Champion League
Finish with a reproducible API, DynamoDB source, APPSYNC_JS resolver, contract tests, and guarded rollout.