Sign inSign up

ipk0/open-resiapp

By ipk0

•Updated 13 days ago

Image
0

2.1K

ipk0/open-resiapp repository overview

Open-source apartment building management for Slovak housing associations. Compliant with Act No. 182/1993 Z.z.

Quick Start

  1. Create docker-compose.yml:

services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: resiapp POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5

app:
  image: ipk0/open-resiapp:latest
  restart: unless-stopped
  depends_on:
    db:
      condition: service_healthy
  environment:
    DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/resiapp
    NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
    NEXTAUTH_URL: ${APP_URL}
    AUTH_TRUST_HOST: "true"
    APP_NAME: ${APP_NAME:-Bytové spoločenstvo}
    LANGUAGE: ${LANGUAGE:-sk}
  volumes:
    - uploads:/app/uploads

caddy:
  image: caddy:2-alpine
  restart: unless-stopped
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - caddy_data:/data
  depends_on:
    - app
  command: caddy reverse-proxy --from ${APP_DOMAIN} --to app:3000

volumes: postgres_data: uploads: caddy_data:

  1. Create .env:

APP_NAME="Bytové spoločenstvo Hlavná 12" APP_URL=https://yourdomain.sk⁠ APP_DOMAIN=yourdomain.sk POSTGRES_PASSWORD=changeMe_veryLongPassword123 NEXTAUTH_SECRET=changeMe_anotherRandomString456

  1. Deploy:

docker compose up -d

  1. Create admin:

docker compose exec app npm run create-admin -- --email [email protected]⁠ --name "Your Name"

Features

  • Weighted voting — three methods: by ownership share, by flat, by area — with SHA-256 audit hash per vote
  • Paper ballots — vote counters record paper votes with photo proof upload
  • Mandate delegation — proxy voting with paper document verification
  • Announcement board — four categories (info, urgent, event, maintenance) with per-entrance targeting and pinning
  • Five roles — admin, owner, tenant, vote counter, caretaker
  • PDF voting minutes — generated with full results breakdown, audit hashes, and embedded QR code
  • Document storage — building documents with entrance-scoped access
  • GDPR consent management — audited consent records with policy versioning and account deactivation on withdrawal
  • Push notifications — web push with per-user notification preferences
  • Invitation system — token-based user registration
  • Slovak and English UI — switchable via LANGUAGE env variable

Environment Variables

VariableRequiredDefaultDescription
DATABASE_URLYes—PostgreSQL connection string
NEXTAUTH_SECRETYes—Session encryption secret
NEXTAUTH_URLYes—Public app URL
APP_NAMENoBytové spoločenstvoBuilding name shown in UI
LANGUAGENoskDefault language (sk or en)
SMTP_HOSTNo—Email server host
SMTP_PORTNo—Email server port
SMTP_USERNo—Email server username
SMTP_PASSNo—Email server password
EMAIL_FROMNo—Sender email address

Tech Stack

Next.js 16, React 19, TypeScript, Tailwind CSS 4, PostgreSQL 16, Drizzle ORM, NextAuth v5, next-intl, Caddy (auto HTTPS)

Architectures

linux/amd64 · linux/arm64

Links

Tag summary

Content type

Image

Digest

sha256:480071b93…

Size

313.3 MB

Last updated

13 days ago

docker pull ipk0/open-resiapp