-
Notifications
You must be signed in to change notification settings - Fork 0
Example Modules
Concrete examples of what you can build with Prism. Each one is a folder — the full code for a working version would be one afternoon of vibe coding.
Folder: src/modules/kanban/
Schema:
model KanbanCard {
id String @id @default(cuid())
title String
column String @default("todo")
order Int @default(0)
createdAt DateTime @default(now())
}Routes:
server.get(`${prefix}/api/cards`, ...) // list all
server.post(`${prefix}/api/cards`, ...) // create card
server.patch(`${prefix}/api/cards/:id`, ...) // move column / reorder
server.delete(`${prefix}/api/cards/:id`, ...) // deleteUI: Three columns (Todo / In Progress / Done). Drag cards between columns. On drop, PATCH the card's column and emit a Socket.io event so other open tabs update live.
Folder: src/modules/projects/
Schema:
model Project {
id String @id @default(cuid())
title String
tasks Task[]
}
model Task {
id String @id @default(cuid())
title String
status String @default("open") // open | in-progress | done
priority String @default("medium") // low | medium | high
dueAt DateTime?
projectId String
project Project @relation(fields: [projectId], references: [id])
createdAt DateTime @default(now())
}Features to add:
- Task list grouped by project
- Filter by status / priority
- Due date reminders via
services.timer.after() - Progress bar per project (% tasks done)
Folder: src/modules/crm/
Schema:
model Contact {
id String @id @default(cuid())
name String
email String?
company String?
notes String?
lastContact DateTime?
createdAt DateTime @default(now())
}Features to add:
- Contact list with search
- Notes per contact
- "Last contacted" tracker — update automatically when you log an interaction
- Reminder to follow up after X days via
services.timer.after()
Folder: src/modules/habits/
Schema:
model Habit {
id String @id @default(cuid())
title String
logs HabitLog[]
}
model HabitLog {
id String @id @default(cuid())
habitId String
habit Habit @relation(fields: [habitId], references: [id])
date DateTime @default(now())
}Features to add:
- Daily check-in UI — tap to mark habits done
- Streak counter (consecutive days)
- Calendar heatmap of completions
- Daily reminder notification at a set time via
services.scheduler
Folder: src/modules/reading/
Schema:
model Article {
id String @id @default(cuid())
title String
url String
tags String[]
read Boolean @default(false)
savedAt DateTime @default(now())
}Features to add:
- Add article by URL (paste link, auto-fetch title)
- Filter by tag / read status
- Browser bookmarklet to save from any page
Folder: src/modules/budget/
Schema:
model Transaction {
id String @id @default(cuid())
amount Float
label String
category String
date DateTime @default(now())
}Features to add:
- Add transactions manually
- Group by category
- Monthly summary chart
- Budget limits per category with alerts
Folder: src/modules/timetrack/
Schema:
model TimeEntry {
id String @id @default(cuid())
label String
project String?
startedAt DateTime @default(now())
stoppedAt DateTime?
}Features to add:
- Start / stop timer with one click
- Log entries with label and project
- Daily / weekly total hours
- Export to CSV
Folder: src/modules/status/
Schema:
model Service {
id String @id @default(cuid())
name String
url String
status String @default("up") // up | down | degraded
lastCheck DateTime?
}Features to add:
- Ping each service URL on a schedule via
services.scheduler - Show current status with green/yellow/red indicators
- Incident history log
- Notify via Socket.io when a service goes down
Fork the repo, drop a folder in src/modules/, and share it. Any of these could be a standalone module that other Prism users drop into their own installation.
→ Creating-a-Module to get started