
CloudQuest: Level Up Your AWS Skills with Gamified Learning
A journey into cloud computing with a gamified learning platform, built with AWS and Amazon Q!
- Multiple Choice: Select the correct answer from a list of options.
- True/False: Determine if a statement is true or false.
- Fill-in-the-Blank: Complete the sentence with the correct words.
- Short Answer: Type in a brief answer to a question.
- Drag and Drop: Match items by dragging them into the correct categories.
- Matching: Pair terms with their definitions.
- Ordering: Arrange steps or items in the correct sequence.
- Image Identification: Select the correct AWS service based on the given image.
- AWS Amplify: This is the backbone of the app, handling frontend hosting, backend, and CI/CD. It also manages user authentication, and authorization using AWS Cognito.
- AWS DynamoDB: This service was used as the database to store all the game data and user progress.
- AWS AppSync: This service was used to create a GraphQL API, connecting the frontend to the DynamoDB database.
- Amazon Q: I used Amazon Q Developer as a co-developer to assist in code generation, debugging, and research.
1
@workspace follow AMPLIFYRULES to develop a data model schema for a gamified learning platform using Amplify Gen 2. Include models for users, modules, lessons, questions, user progress, leaderboards and media. Use Amplify Gen 2 to fetch a user's progress and leaderboard rank.
1
/dev generate three pages, Dashboard, Lesson, and Profile
- AWS Amplify and Cognito: Learning these services and getting them configured took time and effort, but it was also rewarding to learn their power. I learned the power of using AWS Amplify for end to end deployment. I particularly liked how easy it is to setup automated deployments.
- Rapid Development: I challenged myself to build a project in a short amount of time, pushing the limits of what I could achieve in 15 days.
- Just Start: I learned to prioritize tasks based on their impact on functionality. I focused on getting the core gameplay loop working first, and then I moved to other features. I also learned to just start the project and iterate based on the needs.
1
2
3
4
5
6
const userModel = await client.models.User.get<CurrentUserSelectionSet>(
{
id: user.data.id,
},
{ selectionSet: currentUserSelectionSet }
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
export const currentUserSelectionSet = [
"id",
"status",
"email",
"username",
"profilePicture",
"stats.*",
"courses.*",
"courses.course.*",
] as const;
export type CurrentUserSelectionSet = typeof currentUserSelectionSet;
export type UserWithStats = SelectionSet<
Schema["User"]["type"],
CurrentUserSelectionSet
>;