About this project
Why this project exists
This project was created for three main reasons:
- My first project using agentic AI. This is my first time building a real-world product end-to-end by myself, using agentic AI tools alongside all of my web development knowledge. The goal was to go beyond tutorials and side experiments — to ship something complete, with authentication, a database, email flows, and a polished UI. A production-grade application built from scratch.
- Svelte is the framework I know best. I chose Svelte not because it's trendy, but because it's the framework I'm most comfortable with.
I wanted to build something real and full-featured using the tools I understand deeply. Svelte
5's runes mode (
$state,$derived,$effect), SvelteKit's file-based routing, and the clean separation between client and server make it an excellent choice for this kind of project. - It is possible to use React libraries inside Svelte. A technical bonus: this project demonstrates that it's entirely possible to embed a React
component — even a complex one like Excalidraw — inside a Svelte application. By
initializing the React component within a Svelte 5
$effect()(via the@attachdirective), we bridge the two frameworks seamlessly. React becomes just another rendering target, while Svelte handles everything else.
The result? A working Excalidraw clone with auth, database persistence, and folder management — all powered by Svelte, with React living quietly inside a single component.
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Svelte 5 (runes mode) |
| Full-stack framework | SvelteKit |
| Backend | SvelteKit server actions + load functions |
| Auth | Better Auth (email/password + GitHub OAuth) |
| Resend (verification, password reset) | |
| ORM | Drizzle ORM |
| Database | PostgreSQL 18 |
| DB Runtime | Docker Compose (local development) |
| React component | @excalidraw/excalidraw |
| React bridge | react + react-dom (initialized inside $effect()) |
| Language | TypeScript (strict mode) |
| Package manager | Bun |
| Linting/Formatting | ESLint + Prettier |