Skip to content

Example Modules

AnthonyChen05 edited this page Feb 23, 2026 · 1 revision

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.


Kanban board (replaces Trello / Linear)

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`, ...)    // delete

UI: 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.


Project tracker (replaces Monday.com / Asana)

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)

Personal CRM (replaces HubSpot personal tier)

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()

Habit tracker (replaces Streaks / Habitica)

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

Reading list (replaces Pocket / Instapaper)

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

Budget tracker (replaces YNAB / Mint)

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

Time tracker (replaces Toggl)

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

Status page (replaces Statuspage.io)

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

Build one?

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

Clone this wiki locally