Student developer · Aarhus, Denmark
I build software around problems I actually have.
I'm Charlie, 17, an IB Diploma student in Aarhus. Most of what I build is full-stack web — TypeScript, React, Next.js. Right now that's a calendar and study hub for the IB, used by a small group of students at my school.
- Focus
- Syllabi — a calendar and study app built around the IB Diploma Programme
- School
- IB Diploma Programme, Aarhus Gymnasium Tilst
- Stack
- typescript · next.js · supabase · postgres
- Direction
- Medicine and software engineering, deliberately both for now
Selected work
Unedited
Previous siteMy previous site, and an argument for taking things out. A minimalist portfolio designed around Dieter Rams' principles, which in practice meant deleting things until what was left had a reason to be there. It had a blog attached. This site replaces both.
next.js · react · typescript · tailwind
Bitless
Earlier projectAn admin dashboard for managing product and user data — the first project I had to write entirely myself. It taught me data modelling, writing TypeScript someone else has to read, and keeping a codebase legible past the fun part.
Syllabi case study
Syllabi
In use · small group
What should I actually do with my time right now?
It started as my own calendar and turned into a study hub: it syncs my school timetable, tracks assignments and assessments, and plans study time around the hours I actually have.
The difference from a normal calendar is what it tries to understand — school commitments, free time, workload and what I said I wanted to get done — instead of only storing events.
A timetable, a homework list and a photo of a slide — none of which know about each other.
Start from what a week already commits you to, and make putting something in nearly free.
Structure, capture, workload, planning and learning signals over a Postgres schema.
Failure behaviour, tests around scheduling, and better use of the signals already collected.
- school
- travel
- study
About
I found CS50 when I was about seven. I understood a small fraction of it and kept going anyway. For years after that I was mostly learning — reading, following along, rebuilding things that already existed. At some point that stopped being interesting on its own.
The change was an admin dashboard called Bitless: the first project I had to write entirely myself, with no tutorial to follow and no one else's structure to lean on. It's also where I learned that a schema shows through every screen you build on top of it.
Since then the pattern has been the same. I have a problem, I look at what exists, and if nothing fits the way I work, I build it. Syllabi started that way. So did the homelab. I learn by building, which means I'm usually working inside a system before I understand every part of it — and then going back for the part I skipped. I'm deliberate about the going-back. Otherwise it's a pile of code that happens to run.
I'm at Aarhus Gymnasium Tilst, and my academic direction right now is medicine. Software isn't the fallback and medicine isn't the exit — I'm interested in science, engineering, and how systems behave when something goes wrong in them. I'd rather keep the direction open than pick an identity at seventeen.
On AI-assisted work
I use AI-assisted tools every day, and I'm specific about what they do. I design the architecture, the database, the product behaviour and the UX. The tools write code faster than I do. They don't decide how the system works, and I don't ship things I can't debug.
Things I work with
I'm strongest in full-stack web development. Most of the rest I picked up because something I was building needed it.
- Frontend
- TypeScript, React and Next.js. Where most of my code is and where I make the most deliberate decisions: the server and client boundary, data fetching, and the things that decide whether a page feels fast.
- Data
- Supabase and PostgreSQL. I design the schema myself and write SQL by hand when the query matters. Auth, sessions, protected routes, row-level policies.
- Infrastructure
- Vercel, Cloudflare, GitHub Actions, Docker at a basic level, Linux. A homelab has taught me more about networking than anything else.
- AI
- The Vercel AI SDK and LLM APIs, used as an ordinary part of an application's architecture — a component, not a chatbot bolted on the side.
- Improving
- algorithms · cs fundamentals · databases · testing · security · linux · git workflows · system design
The last row is the honest one: it's what I'm working through now, not a list of things I've finished.
Experiments
Homelab
OngoingInfrastructure I own, so I'm allowed to break it. Self-hosted services in Docker, Scrypted bridging IP cameras into HomeKit, PoE and UniFi for the network, Cloudflare in front of anything exposed, and monitoring so I find out before something else does.
docker · scrypted · unifi · cloudflare
PC builds and hardware
OngoingBuilding machines and fixing them. Most of my troubleshooting instinct came from here.
This site
OngoingNo database, no CMS, no analytics. All the copy lives in four typed files, so changing it is a one-line edit.
next.js · tailwind · vercel
What I'm learning
The gaps I'm working on closing, in the order they matter to me.
Reliability in Syllabi
Failure behaviour first: what the app shows when a sync fails or an import reads a date wrong, and which schema decisions would be expensive to change later.
CS fundamentals and system design
Algorithms, databases past getting the right rows back, and what happens when one piece of a system is slow, missing or wrong.
Testing and security
Tests around the scheduling logic, which is the most worth testing and the least tested. Auth edge cases, access rules, and storing less in the first place.
AI as ordinary architecture
Agents, human–AI interfaces, and software that holds enough context to be useful before you ask — the model treated like a database or a queue rather than a feature added at the end.
Contact
Email is the best way to reach me. If you're at my school and want Syllabi, or you've built something near any of this, write to me.
- GitHub
- @charliva
- not added yet
- X
- not added yet