⚠️ Disclaimer: I’m using AI (Gemini) to help guide me through this project and to assist with writing these blog posts. The project is still hands-on — I’m doing all the setup, and AWS work myself — but AI is acting as a mentor and documentation assistant along the way.
Why This Project?
I’m currently preparing for the AWS Solutions Architect Associate (SAA-C03) certification. Instead of only watching videos or reading notes, I wanted a hands-on project that would:
- âś… Help me practice real AWS services in a practical way.
- âś… Keep me motivated through daily progress.
- âś… Double as a tool I can use to study for the exam itself.
That’s how I came up with this project: build a flashcards web app for AWS exam prep, hosted entirely on AWS.
The Plan
The idea is simple:
- A web app where I can log in, flip through AWS flashcards, and track my study progress.
- The app itself will run on AWS services I need to know for the exam (S3, CloudFront, DynamoDB, Cognito, API Gateway, Lambda, CloudWatch, etc.).
- I’ll build it step by step over ~6 weeks, dedicating ~10–15 hours per week.
🛠️ Returning to the Path: Building Tamriel for my AWS Journey
For the last five years, the AWS Solutions Architect Associate (SAA-C03) exam has been a looming mountain on my horizon. I’ve started the journey, completed labs, and studied documentation more times than I can count. But as many of us know, life doesn't always care about your study schedule. Personal reasons and life’s unpredictable turns kept me from reaching the finish line.
But 2026 is different. Instead of just picking up where I left off, I’m building a fresh foundation. I’m moving away from just following guided cloud tutorials and building a Hybrid Cloud Lab on a physical laptop I've named Tamriel. This is my "re-entry" project to master the bridge between on-premise Linux and the AWS ecosystem.
🏗️ Phase 0: The Physical Foundation
The mission is to build an AWS Flashcards App to help me study, but the app needs a home. Today was about setting up that home on a repurposed Lenovo laptop running Ubuntu Server 24.04 LTS.
Hardening the Entryway
Security is the first rule of AWS, so I applied it to my local server first:
- SSH Key Auth: No passwords allowed. I generated an ED25519 key pair on my Windows 11 workstation and locked the server down so it only accepts my digital signature.
-
Headless Setup: Modified
logind.confso the laptop stays awake with the lid closed. It’s now tucked away, acting as a true server.
⚔️ The "Layer 1" Boss Fight
Everything was going great until I tried to set a Static IP. Suddenly, Tamriel went dark. No SSH, no internet.
The Troubleshooting Journey:
- Netplan Configuration: We wrestled with YAML formatting. In Ubuntu 24.04, the syntax for routes has changed, and one wrong space can kill your network.
-
The "Dead" Service: Discovered the SSH service was marked as
inactive (dead). A quicksudo systemctl enable --now sshbrought the "phone line" back to life. -
The Culprit: Even with perfect code, the interface stayed
degraded (configuring).
The Lesson: After checking every line of code, it turned out to be a faulty Ethernet cable. Replacing the cable instantly brought the link up to 1000Mbps Full Duplex.
Pro-Tip: Always check your physical layer (Layer 1) before you start rewriting your software (Layer 3)!
🚀 What’s Next?
Tamriel is rock solid at 10.0.0.205. Now, I can finally start the real work. Next up: Sprint 1 — The Dockerization of the Lab. I’ll be installing Docker to run the local development environment for my Flashcards App.
The mountain is still there, but this time, I’ve got better gear.
That is the perfect way to cap off the session. Documenting as you go is a hallmark of a great Solutions Architect—it turns a "task" into a "learning asset."
Since we’ve pivoted from simple flashcards to a full Hybrid Exam Simulator, here is a summary tailored for your next dev.to post. I’ve aligned it with your 5-year journey narrative and today's technical milestones.
📝 Blog Update: Day 2 – Orchestrating the Hybrid Lab
The Pivot: From Flashcards to Exam Simulator
After reviewing the project goals, I decided to shift from a simple "flashcard" mechanic to a more robust Multiple-Choice Exam Simulator. Why? Because the SAA-C03 exam is scenario-based. To pass, I need to simulate the actual pressure of choosing between four complex architectural solutions.
Technical Milestones: Moving from "Manual" to "Automated"
Today was about moving away from "blank slate" hardware and toward a professional-grade development environment.
1. Environment Provisioning
- The Challenge: Tamriel (my Ubuntu Server) was a blank slate without Node.js or Git identity.
- The Solution: Installed Node.js 20 and npm to support modern React development. I also configured my global Git identity to ensure every commit to my lab "Source of Truth" is tracked correctly.
2. "Dockerizing" the Frontend
- Scaffolding a fresh React application directly on the server.
- Wrote a custom Dockerfile using the
node:20-alpineimage to keep the footprint small and secure.
3. Real-Time Development with Docker Volumes
- The Breakthrough: Solved the "Container Catch-22" by implementing Docker Volumes.
- By mapping my local directory (
/home/sjhonson/projects/...) to the container's/appfolder, I achieved Hot Reloading. Now, any code change I make on Tamriel is reflected instantly in my Windows 11 browser.
4. Infrastructure as Code (IaC) with Docker Compose
- I replaced long, error-prone
docker runcommands with a singledocker-compose.ymlfile. - This is my "Mini-CloudFormation." It captures my ports, volumes, and environment variables, making the lab 100% repeatable. One command—
docker compose up -d—and the entire simulator is live.
Current Progress: SAA-C03 Connection
- Reliability: The lab is now version-controlled and documented.
- Storage: Practiced the difference between persistent image storage (EBS-style) and shared live volumes (EFS-style).
This is the perfect way to wrap up. Your second blog post is going to show a massive jump in technical maturity—moving from "I have a server" to "I have a styled, orchestrated application."
Here is a structured summary of today’s achievements, formatted specifically for your dev.to blog.
📝 Blog Update: Day 3 – Logic, Styling, and the "Fancy" Factor
The Goal: Turning Code into a Portal
Yesterday was about the plumbing (Docker). Today was about the User Experience (UX). I moved the project from a blank screen to a functional AWS SAA-C03 Exam Simulator that actually helps me study.
Technical Highlights
1. Decoupling Data from Logic
- The Challenge: Hard-coding questions into the app makes it impossible to scale.
-
The Solution: I created a dedicated
question.json"database." This follows the SAA-C03 principle of Separation of Concerns. Now, the app logic stays the same even if I add 1,000 new questions.
2. Instant Feedback & State Management
- I implemented a "Feedback Loop." When a user selects an answer, the app immediately calculates if it’s correct, displays a message (Green for success, Red for failure), and pauses for 1.5 seconds before moving on.
- SAA Connection: This is a micro-version of Asynchronous Processing. I’m using React "State" to track the user’s journey in real-time.
3. The "AWS Console" Makeover
- Plain HTML buttons weren't enough. I wrote custom CSS to mimic the AWS Management Console aesthetic—using the signature AWS Blue and Orange palette.
- I added a Dynamic Progress Bar that fills up as you move through the quiz, giving that "High-End Training" feel.
4. Disaster Recovery & Version Control
- I finished the day by syncing everything to GitHub. I'm treating my code like an EBS Snapshot—snapshotting my progress (Git Commit) and replicating it to another "Region" (Git Push to GitHub) to ensure I never lose a day of work.
Current Progress: SAA-C03 Connection
- Operational Excellence: My environment is repeatable via Docker.
- Reliability: My code is backed up and versioned.
- Cost Optimization: I'm building this entire lab on my local hardware (Tamriel) before I spend a single cent on AWS cloud resources.
Next Steps
Now that the frontend is "Fancy," I’m ready for the Hybrid part of the project:
- Moving the question bank from a local file to a Cloud Database (DynamoDB).
- Setting up a Python/FastAPI backend to serve those questions.
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.