A self-hosted monitoring and status page application built with SvelteKit 2 and Svelte 5.
- Monitor Types: HTTP, TCP, and push-based health checks
- Incident Management: Track and manage service incidents
- Notifications: Multi-channel alerts via Email, Slack, Discord, and Webhooks
- Public Status Pages: Customizable status pages for your customers
- Multi-tenant: Organization-based authentication with team support
- Admin Panel: Manage users and organizations
- Runtime: Bun
- Framework: SvelteKit 2 with Svelte 5
- Database: PostgreSQL via Drizzle ORM
- Auth: better-auth with organization support
- UI: shadcn-svelte components
- Forms: sveltekit-superforms with Valibot validation
- i18n: Paraglide
- Bun (v1.0+)
- PostgreSQL (v15+) or use Docker
-
Clone the repository
git clone https://github.com/NeonRook/uppity.git cd uppity -
Install dependencies
bun install
-
Start PostgreSQL (using Docker)
docker compose up -d
-
Configure environment
cp .env.example .env
Edit
.envand set at minimum:DATABASE_URL- PostgreSQL connection string (default works with Docker)BETTER_AUTH_SECRET- Generate withopenssl rand -base64 32
-
Push database schema
bun run db:push
-
Start the development server
bun run dev
Open http://localhost:5173 in your browser.
# Start dev server
bun run dev
# Type checking
bun run check
# Linting (with auto-fix)
bun run lint
# Formatting (use pnpm for this command)
pnpm run fmt
# Run unit tests
bun run test:unit
# Run e2e tests
bun run test:e2e
# Database GUI
bun run db:studiosrc/
├── lib/
│ ├── server/
│ │ ├── db/schema.ts # Drizzle database schema
│ │ ├── services/ # Business logic layer
│ │ ├── notifications/ # Notification channel implementations
│ │ ├── jobs/scheduler.ts # Background job scheduler
│ │ └── auth.ts # Authentication configuration
│ ├── schemas/ # Validation schemas
│ └── components/ui/ # shadcn-svelte components
└── routes/
├── (app)/ # Protected application routes
│ ├── dashboard/ # Main dashboard
│ ├── monitors/ # Monitor management
│ ├── incidents/ # Incident tracking
│ ├── notifications/ # Notification channels
│ ├── status-pages/ # Status page configuration
│ └── settings/ # User settings
├── (auth)/ # Login and registration
├── (admin)/ # Admin panel
├── (public)/status/[slug]/ # Public status pages
└── api/ # API endpoints
Build and run with Docker Compose:
# Set required environment variables
export BETTER_AUTH_SECRET=$(openssl rand -base64 32)
export BETTER_AUTH_URL=https://your-domain.com
export BETTER_AUTH_TRUSTED_ORIGINS=https://your-domain.com
# Start with production compose file
docker compose -f docker-compose.prod.yml up -dOr build the image manually:
docker build \
--build-arg VITE_BETTER_AUTH_URL=https://your-domain.com \
-t uppity .See .env.example for all available configuration options.
Required:
DATABASE_URL- PostgreSQL connection stringBETTER_AUTH_SECRET- Auth secret key (min 32 characters)BETTER_AUTH_URL- Public URL of your application
Optional:
SMTP_*- Email notification settingsUPPITY_DEFAULT_*- Monitor default configurationsUPPITY_CRON_*- Background job schedules
We welcome contributions! Please see our Contributing Guide for details.
This project follows the Contributor Covenant Code of Conduct.
This project is licensed under the GNU Affero General Public License v3.0.
Commercial licensing is available for organizations that cannot use AGPL-licensed software. Contact us for details.