All work

Product · Study app on Google Cloud

SkillDags: A Study App an AI Agent Can Write

A study app where a subject is a map, not a list. Each module opens once you finish the modules it depends on. Every module has a lesson and an exam-style quiz, plus a practice gym for the questions you got wrong. Four subjects and 216 modules run live on Google Cloud, written by an AI agent instead of typed into a form.

React FastAPI Firestore Cloud Run MCP server Google Cloud CI/CD
Study modules drawn as a graph. Finished modules sit in the middle, the ring around them has just opened, and the modules further out are still closed.

Finish a module and the ones that depend on it open.

216
Modules in 4 live subjects
24
Tools an AI agent can call
0
Secret keys stored anywhere
How it works

The content decides the order.

Every module lists the modules you have to finish first. That one fact draws the map and decides what opens next. It also means a new subject needs no new code. It only needs content that says what comes before what.

  1. 01
    An AI agent writes it
    24 tools, one key
  2. 02
    The map opens it
    when you are ready
  3. 03
    Read, then answer
    lesson and quiz
  4. 04
    Practise your misses
    3 right retires it
A real corner of the live map, drawn with the app's own cards
N05
Containers & Artifact Registry
N01
Resource Hierarchy & IAM
N06 Start here
Cloud Run Fundamentals
N12
Cloud Run Revisions & Scaling
  1. Done
  2. Open now, because both of those are done
  3. Still closed, until the one above it is done
What I built

The product, the door for AI agents, and the way it ships.

From the map a learner reads, to the tools that let an agent write a course, to the pipeline that puts it in front of people.

  1. 01

    The skill tree. Each module lists the modules you have to finish first, and the app turns that into a map. Modules with nothing before them sit in the middle, and each ring further out needs one more thing done. A module opens the moment you finish what it depends on, so nobody sets the order by hand. The same map can also be read as columns by topic, or as a plain list.

  2. 02

    The lesson page. Every module is a written lesson in numbered sections, with tables, commands you can run, and diagrams drawn from the text. Under it sits an exam-style quiz. You commit to an answer first, then it tells you if you were right and explains why.

  3. 03

    The practice gym. Question sets grouped by topic, plus a queue built only from the questions you got wrong. Get one right three times and it leaves the queue. A practice run records what you missed and nothing else. It never moves your progress on the map, so practice can never be mistaken for real progress.

  4. 04

    A second way in, built for AI agents. There are 24 tools an agent can call to create a subject, write its modules, set which module needs which, and publish. They run the same code the admin screens run, so the rules that keep content correct are written once instead of twice. On the agent's side there is a guide telling it where facts have to come from, what order to build the map in, and which edits would quietly wipe out a learner's saved progress.

  5. 05

    The key that opens that door, and the five limits around it. An agent cannot refresh a login the way a browser can, so it uses an API key. That is the only long-lived password in the system, so I wrote down what has to stay true for it to be safe. Only its fingerprint is stored. The real key is shown once and never again. Every key expires, after 90 days by default and one year at most. A key opens that one door and nothing else. And losing your admin role cancels every key you made.

  6. 06

    The shape of the backend. The rules sit in the middle, and everything else plugs into them: the web API, the agent tools, the database, and file storage. Firebase handles logging in. One setting says which environment you are working in, and the database and storage names are worked out from it, so a laptop cannot write to the live system by accident.

  7. 07

    The path to production. Four services on Google Cloud Run, built and deployed by GitHub Actions. No secret key is stored anywhere for this, because GitHub proves who it is to Google directly. The pipeline refuses to ship a version number that already exists, and once it has deployed it asks the live service which version is running instead of trusting that the deploy worked.

The setup on Google Cloud

Four services, and one way into the data.

Three web apps and one AI agent all talk to the same API, which is the fourth service. Nothing in a browser talks to Google directly. The only thing a web app asks Firebase for is proof of who you are. Everything after that goes through the API.

Cloud Run
Learner app
skilldags-app · the map, modules, gym
Cloud Run
Admin app
skilldags-admin · writing and feedback
Cloud Run
Marketing site
skilldags-web · the public list
Client
AI agent
24 tools, one API key
Cloud Run
skilldags-api, in Python
the web API and the agent tools, over the same code
Managed by Google
Firebase Authentication
who is asking
Managed by Google
Firestore
content, profiles, progress
Managed by Google
Cloud Storage
uploaded images
Cloud Run · europe-west1Artifact RegistryGitHub Actions, no stored keyManaged TLSDeploy checked against the live version

One setting, SKILLDAGS_ENV, decides which database and which storage the app uses. That is what stops a laptop writing to the live system. The pipeline also refuses to ship a version number that already exists, and after deploying it asks the live service which version is running rather than assuming it worked.

The core idea

Two doors, one set of rules.

The easy way to let an agent write content is to build it a second API. That means writing every rule twice. The day the two copies stop agreeing is the day a course goes live with a question whose correct answer is not one of the options. So the rules sit in the middle and everything else plugs into them. The admin screens and the agent tools are two ways into one piece of code.

Ways in
The web API
used by the admin screens
The agent tools
24 of them, used by an AI agent
The middle
What the app can do
who is allowed to change what, and when
Rules the content must follow
a module you depend on has to exist · every topic named has to exist · an answer has to point at a real option · a subject cannot go live empty
Ways out
Firestore
content and progress
Cloud Storage
images
The key

One long-lived password is a risk, so I wrote down the limits.

An agent cannot refresh a login the way a browser can, so it opens its door with an API key. That key is the only long-lived password in the whole system. Five limits are what make it safe to have. If any one of them stops being true, the key stops being safe.

  1. Only its fingerprint is stored
  2. The real key is shown once, then never again
  3. Every key expires: 90 days, one year at most
  4. A key opens that one door and nothing else
  5. Losing your admin role cancels your keys
Why it matters

The second subject cost content and no code.

What exists is a working product with real content in it: four subjects, 216 modules, live and reachable. The part I am most sure of is that the second subject cost content and no code. The app learned nothing about data engineering in order to carry it. That is the difference between a design that really does work for any subject and a claim that it does. And because agents pass through the same rules as people, adding a course is research and writing rather than two weeks of filling in forms. The engineering here is deliberately boring: one place for each rule, one setting that says which environment you are touching, and a pipeline that will not tell you a deploy worked when it did not.

Working for any subject is something you can test, not something you can claim.

Do you have content an AI agent could write?

Tell me what your team writes by hand today. I will come back with what a door for agents would look like, and what would have to be true before you trusted it.

Get in touch