Open-source web system for communication between university festival committees and participating groups.
PortalDots is a web system that supports communication between festival executive committees and participating group representatives. It handles participant registration, form submissions, document distribution, and bulk email delivery — all in one place.
Developed by s-union, department of information systems. Free and open source under the MIT License.
| Layer | Technology |
|---|---|
| Frontend | Vue 3 · Vite · TypeScript · Tailwind CSS v4 |
| Backend | Go · Echo · PostgreSQL 18 |
| DB access | sqlc · pgx/v5 |
| API contract | OpenAPI 3.x at backend/api/openapi.yaml |
| Email delivery | Cloudflare Workers Queue (email Worker) |
| Task runner | mise |
| Package manager | pnpm (workspace) |
PortalDots/
├── backend/ # Go API server
├── frontend/ # Vue 3 SPA
├── packages/
│ ├── api-client/ # openapi-typescript generated client
│ └── email/ # Cloudflare Worker: enqueue and deliver outbound mail
└── mise.toml # task runner config
- mise — manages Go, Node.js, sqlc, air, and other tools
- Docker — runs the local PostgreSQL container
- pnpm — installed globally against the mise-managed Node.js
# 1. Clone
git clone git@github.com:s-union/PortalDots.git
cd PortalDots
# 2. Install tools and dependencies, initialize .env, set up hooks, and seed the DB
mise bootstrap
# 3. Start the dev stack
mise run devOnce running:
| Service | URL |
|---|---|
| Frontend (Vite) | http://127.0.0.1:5173 |
| Backend API | http://127.0.0.1:8080 |
| PostgreSQL | localhost:55432 |
To also start the email Workers local stack:
mise run dev:worker# Static checks — all at once
mise run check
# Format
mise run format # Go + frontend together
mise run backend:format # Go only
mise run frontend:format # frontend only
# Tests
mise run backend:test # Go tests
cd frontend && pnpm test # Vitest unit tests
mise run e2e:worker # Playwright integration tests (requires dev:worker)
# Database
mise run backend:migrate # apply pending migrations
mise run backend:seed # insert demo data
mise run db:delete # destroy local DB volume
# API client type generation
mise run api:client:codegenFor stack-specific details see:
Issues and pull requests are welcome. See CONTRIBUTING.md for details.