Production-ready starter kit untuk aplikasi web berbasis SvelteKit 5 dengan Runes. Template lengkap yang bisa langsung dipakai sebagai fondasi proyek baru.
super_admin, admin, editor, viewer| Layer | Technology |
|---|---|
| Framework | SvelteKit 5 (Runes) |
| Language | TypeScript |
| Styling | Tailwind CSS v4 + CSS Variables |
| Database | SQLite (default) / MySQL / PostgreSQL |
| ORM | Drizzle ORM |
| Auth | Lucia v3 + Oslo |
| UI | Custom components (shadcn-inspired) |
git clone <this-repo>
cd SvelteKit_StarterWeb
npm install
cp .env.example .env
# Edit .env sesuai kebutuhan
npm run dev
Database akan otomatis di-seed pada request pertama.
Email: [email protected]
Password: admin123
src/
āāā lib/
ā āāā components/
ā ā āāā ui/ # Button, Input, Modal, Toast, Card, Badge, Avatar
ā ā āāā layout/ # Sidebar, Navbar, PageHeader
ā ā āāā auth/ # PermissionGuard
ā āāā stores/ # Rune-based: theme, toast, sidebar, device
ā āāā server/
ā ā āāā auth.ts # Session management, password hashing
ā ā āāā db/ # Drizzle ORM + Schema
ā ā āāā permissions.ts
ā ā āāā email.ts # Stub (replace with real service)
ā ā āāā seed.ts # Auto-seed default data
ā āāā utils/ # Client-side permission checks
ā āāā types/ # TypeScript type definitions
āāā routes/
ā āāā (auth)/ # Login, Register, Forgot Password
ā āāā (app)/ # Protected: Dashboard, Profile, Settings, Admin
ā āāā logout/
āāā hooks.server.ts # Session validation + auto-seed
Buka /settings/theme ā pilih warna preset ā selesai.
Edit src/app.css:
:root {
--color-primary: 220 90% 56%; /* HSL values */
--color-secondary: 260 60% 55%;
--color-accent: 170 70% 45%;
}
Edit src/lib/stores/theme.svelte.ts:
export const themePresets = [
// ... existing presets
{
id: 'my-theme',
name: 'My Custom Theme',
colors: {
primary: '180 80% 45%',
primaryHover: '180 80% 38%',
// ...
}
}
];
// Di +page.server.ts atau +server.ts
import { hasPermission } from '$lib/server/permissions';
const canDelete = await hasPermission(userId, 'users:delete');
<script>
import PermissionGuard from '$lib/components/auth/PermissionGuard.svelte';
</script>
<PermissionGuard requires="users:delete" userPermissions={data.permissions}>
<button>Delete User</button>
</PermissionGuard>
| Role | Permissions |
|---|---|
| super_admin | ALL |
| admin | users (CRU), settings (RU), dashboard, profile |
| editor | users (R), dashboard, profile |
| viewer | dashboard, profile |
DATABASE_URL=./data/app.db
npm install mysql2
npm install drizzle-orm/mysql-core
Update src/lib/server/db/index.ts dengan MySQL adapter.
npm install pg
npm install drizzle-orm/pg-core
Update src/lib/server/db/index.ts dengan PostgreSQL adapter.
Schema Drizzle tetap sama ā hanya adapter yang berubah.
src/routes/(app)/your-page/+page.svelte dan +page.server.ts (jika butuh server logic)src/routes/(app)/+layout.svelteDEFAULT_PERMISSIONS di src/lib/server/seed.tsDEFAULT_ROLES untuk assign permission ke roleEdit src/lib/server/email.ts ā replace sendEmail() dengan implementasi Nodemailer/Resend/SendGrid.
MIT ā Free to use for any project.