LearnForge is a small SvelteKit project for creating, sharing, and practicing with custom learning trainers. The current version focuses on vocabulary and question-answer trainers with text input, public collections, and simple learning statistics.
The project is currently more of a personal prototype than a finished product. It is publicly available so that the code remains transparent and can be further developed by anyone interested.
Already available:
- Registration and login via email using Better Auth
- Create, edit, delete, and publicly share trainers
- Manage vocabulary items and question-answer entries
- Browse public trainers and clone them into your own account
- Text input-based practice with repetition of incorrectly answered entries
- Simple progress and status overview per trainer
- Account settings for profile, email, password, and active sessions
- Local email testing via Mailpit
- PostgreSQL setup using Docker Compose
Still open or experimental:
- Additional exercise types such as single choice, multiple choice, or flashcards
- Import and export of trainers
- Advanced statistics and learning time analysis
- Internationalization
- Offline and/or PWA support
- Teacher, support, or community features
- SvelteKit 2 and Svelte 5
- TypeScript
- Tailwind CSS 4 and DaisyUI
- Better Auth
- Drizzle ORM
- PostgreSQL
- Nodemailer
- pnpm
- Node.js
- pnpm
- Docker and Docker Compose for the local PostgreSQL and Mailpit environment
-
Install dependencies:
pnpm install
-
Create environment variables:
cp .env.example .env
-
Set
BETTER_AUTH_SECRETin.envto your own random value. For local development, a string with 32+ characters can be used, for example. -
Start the database and Mailpit:
docker compose up
Mailpit will then be available at http://localhost:8025.
-
Apply the database schema:
pnpm db:push
-
Start the development server:
pnpm dev
pnpm dev # development server
pnpm build # production build
pnpm preview # preview local production build
pnpm check # Svelte/TypeScript validation
pnpm lint # Prettier and ESLint checks
pnpm format # format code
pnpm db:push # push Drizzle schema to the database
pnpm db:studio # open Drizzle StudioThe required variables are listed in .env.example.
DATABASE_URL: PostgreSQL connection stringORIGIN: public base URL of the app, typicallyhttp://localhost:5173for local developmentBETTER_AUTH_SECRET: secret key for Better AuthUPLOAD_DIR: local upload directorySMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASSWORD: SMTP credentialsMAIL_FROM: sender address for system emails
LearnForge should not be considered a stable release. The code can be used as a starting point, learning project, or foundation for your own experiments. Contributions, issues, and forks are welcome if someone wants to continue developing the project or use individual ideas from it.
This project is licensed under the GNU General Public License v3.0. Details can be found in LICENSE.