Simple, clean, and efficient meeting scheduling app.
├── README.md
├── drizzle.config.ts
├── next.config.mjs
├── node_modules
├── package.json
├── src
│ ├── app
│ │ └── [ all front-end routes ]
│ ├── components
│ │ └── [ front-end components ]
│ ├── db
│ │ ├── index.ts
│ │ ├── migrations
│ │ └── schema.ts
│ ├── lib
│ └── server
│ ├── actions ( mutate or insert data )
│ │ └── [ entity ]
│ │ └── [ verb ]
│ │ └── action.ts
│ └── data ( query data )
│ └── [ entity ]
│ └── queries.ts
└── tsconfig.json- Git
- Node.js
- pnpm
- Just run
npm i -g pnpmto install.
- Just run
- Docker Desktop
- Clone this repository locally
- Navigate to the root directory and install the dependencies.
cd ZotMeetpnpm install
- Copy the example environment file:
cp .env.example .env
- Make sure Docker Desktop is running, then set up the database:
pnpm db:setup
- Start the development server
pnpm dev(runpnpm dev --hostif you want to access the server from other devices on your network)
- The app should be viewable at
localhost:3000by default.
| Command | Description |
|---|---|
pnpm db:setup |
Start database and run migrations (first time setup) |
pnpm db:start |
Start the PostgreSQL container |
pnpm db:stop |
Stop the PostgreSQL container (data persists) |
pnpm db:reset |
Reset database - removes all data and re-runs migrations |
pnpm db:generate |
Generate new migrations from schema changes |
pnpm db:migrate |
Apply pending migrations |
pnpm db:studio |
Open Drizzle Studio to browse your database |
pnpm db:seed |
Seed the database with a group and up to 20 random test users |
- Follow the Conventional Commits specification when writing commit messages.
- E.g.,
git commit -m "feat: add this feature";git commit -m "fix: fix this bug".
- E.g.,
- Keep commits and PRs atomic.
- A PR should be a single feature or bug fix.
- A commit should be a single logical change.
If you need credentials for the .env file, contact the project lead (Kyle).
After changes to the .env file, run pnpm run check to update SvelteKit's auto-generated environment variable types.
The seed script (src/db/seed.ts) creates a group called "ZotMeet Test Group" and populates it with up to 20 randomly generated users. This is useful for testing features like availability views and group dashboards without needing real accounts.
To seed:
pnpm db:seedThe script can be run multiple times — each run adds up to 20 more randomly generated members to the group, so you can keep running it to grow the group as needed.
Important: The script cannot access your session, so it has no way of knowing your user ID. After seeding, you must manually add yourself to the group:
- Open Drizzle Studio:
pnpm db:studio - Find your user ID in the
userstable. - Insert a row into
usersInGroupwith your user ID and the seeded group's ID.
erDiagram
users {
string id PK, FK
string email
string passwordHash
timestamp createdAt
}
groups {
uuid id PK
string name
string description
timestamp createdAt
string createdBy FK
}
usersInGroup {
string userId FK
uuid groupId FK
}
members {
uuid id PK
string displayName
}
availability {
uuid memberId FK
uuid meetingId FK
json meetingAvailabilities
enum status
}
meeting {
uuid id PK
string title
string description
string location
json dates
string meetingType
boolean scheduled
time fromTime
time toTime
string timezone
uuid groupId FK
uuid hostId FK
timestamp createdAt
}
sessions {
string id PK
timestamp expiresAt
string userId FK
string googleAccessToken
string googleRefreshToken
timestamp googleAccessTokenExpiresAt
}
oauth_accounts {
string userId FK
string providerId PK
string providerUserId PK
}
meeting ||--o{ availability : has
users ||--o{ usersInGroup : has
groups ||--o{ usersInGroup : contains
members ||--o| users : extends
members ||--o{ availability : provides
users ||--o{ sessions : has
users ||--o{ oauth_accounts : has