EpicER is a full-stack Kotlin web application designed to manage and share recipes in a structured, scalable, and user-friendly way. The platform allows users to create, view, and organize recipes—each enriched with ingredients, steps, sections, and images. It is built entirely with Kotlin using modern technologies like Ktor, Exposed, and KVision, with a strong emphasis on type safety, modularity, and maintainability.
- 🔐 Authentication & Authorization
- JWT-based login system
- Role-based access (admin, maintainer, user)
- 🧑🍳 Recipe Management
- Create and edit recipes with portions, sections, and steps
- Add ingredients to both the recipe and individual steps
- Upload and associate images to recipes and steps
- 🧾 Ingredients and Units System
- Reusable ingredients and measurement units
- Unit conversion support with reference units
- 🧠 Reactive Frontend
- Built with KVision for a reactive, component-based UI
- Supports live updates without reloading the page
- 🌐 RESTful API Backend
- Built with Ktor and Exposed (SQL DSL)
- Secure, robust, and modular architecture
- 📦 Shared DTOs
- Data consistency between frontend and backend using shared Kotlin Multiplatform DTOs
| Layer | Technology |
|---|---|
| Frontend | KVision |
| Backend | Ktor + Exposed |
| Database | MariaDB |
| Auth | JWT (via Ktor plugin) |
| Language | Kotlin (Multiplatform support for shared code) |
Note: These instructions assume you are using IntelliJ IDEA and have MariaDB running.
cd backend
./gradlew runcd frontend
./gradlew kobwebRun- The application uses MariaDB.
- Database tables are created automatically in Ktor.
- A default admin user is auto-generated if none is present.
EpicER/
│
├── backend/ → Ktor + Exposed + Authentication
├── frontend/ → KVision components, forms, views
├── common/ → Shared DTOs across backend/frontendUsing Kotlin across frontend and backend:
- Ensures type safety
- Minimizes bugs thanks to shared data models
- Improves productivity with a unified tech stack





