Open Source · Self-hosted · Docker Hub · § 182/1993 Z.z.

Správa bytovky
pre ľudí,
nie pre právnikov

Elektronické hlasovanie, nástenka a správa vlastníkov pre slovenské bytové spoločenstvá. V súlade so zákonom č. 182/1993 Z.z. Zadarmo, bez predplatného, plne pod vašou kontrolou.

bash
# Vytvor docker-compose.yml a .env
mkdir open-resiapp && cd open-resiapp
# (obsah v dokumentácii nižšie)

# Spusti – stiahne z Docker Hub
docker compose up -d

Pulling ipk0/open-resiapp:latest...
✓ Databáza pripravená
✓ Migrácie hotové
✓ App beží na https://yourdomain.sk

Všetko čo bytovka potrebuje

Navrhnuté pre slovenské právne prostredie, prístupné pre každého – aj pre dôchodcov.

🗳️

Váhované hlasovanie

Tri metódy hlasovania podľa § 14 zákona 182/1993 Z.z.: podľa podielu, podľa bytov, podľa plochy. Tri typy kvóra (nadpolovičná väčšina prítomných, všetkých, 2/3 všetkých). Každý hlas je auditovaný SHA-256 hashom.

📄

Papierové hlasy

Sčítač zadá hlas za dôchodcu, priloží foto lístka. Vlastník dostane email s potvrdením.

✍️

Mandáty

Splnomocnenie s úradne overeným podpisom podľa § 14 ods. 5. Vlastník deleguje hlas susedovi pre konkrétne hlasovanie. Reťazové mandáty nie sú povolené.

📋

Nástenka

Oznamy, udalosti, opravy. Možnosť cieliť na konkrétny vchod. 4 kategórie: info, náliehavé, udalosť, údržba.

🏠

Viac vchodov

Jedno spoločenstvo, viacero vchodov. Každý byt má definovaný spoluvlastnícky podiel a plochu.

📊

Zápisnice PDF

Po hlasovaní automaticky vygenerovaná zápisnica s audit logom a QR kódom. Predseda ju podpíše fyzicky.

V súlade so zákonom č. 182/1993 Z.z.

Hlasovací modul je navrhnutý podľa zákona o vlastníctve bytov a nebytových priestorov v znení neskorších predpisov.

§ 14a ods. 1–2
Písomné hlasovanie (per rollam) aj hlasovanie na schôdzi
§ 14a ods. 4
Splnomocnenie s úradne overeným podpisom, bez reťazového delegovania
§ 14b ods. 1–2
Tri typy kvóra – nadpolovičná väčšina prítomných, všetkých vlastníkov, alebo 2/3 všetkých vlastníkov
§ 14 ods. 2
Tri metódy: podľa spoluvlastníckeho podielu, podľa bytov, podľa plochy
§ 14b ods. 5
Štvrtina vlastníkov môže iniciovať hlasovanie
SHA-256
Každý hlas auditovaný kryptografickým hashom s e-mailovým potvrdením

Súlad so zákonom

Požiadavka zákona Status
Hlasovanie podľa spoluvlastníckeho podielu
Nadpolovičná väčšina všetkých vlastníkov
Dvojtretinová väčšina všetkých vlastníkov
Písomné hlasovanie (per rollam)
Hlasovanie na schôdzi (len papierové hlasy)
Splnomocnenie s úradne overeným podpisom
Zákaz reťazenia splnomocnení
Hlasovanie iniciované ¼ vlastníkov
Overovateľ hlasovania
Auditný záznam (SHA-256 + email)
Nájomníci nemajú hlasovacie právo
Zápisnica z hlasovania (PDF)

Päť rolí, jasné hranice

Každý vidí len to, čo mu patrí. Roly sú pridelené správcom bytovky.

Admin / Predseda
  • Vytvára hlasovania
  • Spravuje vlastníkov a byty
  • Publikuje oznamy
  • Prideľuje roly
  • Generuje zápisnice
Vlastník
  • Hlasuje elektronicky
  • Udeľuje mandát
  • Vidí výsledky hlasovaní
  • Číta nástenku
  • Sťahuje dokumenty
Nájomca
  • Číta nástenku
  • Vidí dokumenty
  • Dostáva notifikácie
Sčítač hlasov
  • Zadáva papierové hlasy
  • Fotí hlasovací lístok
  • Rola platí len pre 1 hlasovanie
Správca
  • Číta nástenku
  • Vidí nastavenia budovy
  • Publikuje oznamy

Postavené na moderne

Ovežené technológie, ktoré vám uľahčia deploy aj príspevky.

Next.js 16 App Router
React 19 UI
TypeScript Strict
Tailwind CSS Styling
Drizzle ORM Database
PostgreSQL 16 Storage
NextAuth v5 Auth
Docker Deploy
Caddy HTTPS
Nodemailer Email
next-intl i18n
react-pdf PDF export

Ako to rozbehnúť

Požiadavky

Na spustenie OpenResiApp potrebuješ:

  • Docker 24+ a Docker Compose plugin
  • Server alebo VPS s min. 1 GB RAM a 10 GB disku
  • Doménu alebo subdoménu (pre HTTPS)
  • SMTP prístup (pre emaily)
💡 Na lokálne testovanie stačí aj tvoj laptop – Docker Desktop na Windows alebo macOS.

Inštalácia

&x2139;️ Docker obraz ipk0/open-resiapp je dostupný na Docker Hub. Podporuje linux/amd64 a linux/arm64.

1. Vytvor docker-compose.yml

mkdir open-resiapp && cd open-resiapp

Ulož nasledovný obsah ako 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:-Bytove spolocenstvo}
      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:

2. Nastav .env

Vytvor súbor .env s týmito hodnotami:

APP_NAME="Bytove spolocenstvo Hlavna 12"
APP_URL=https://yourdomain.sk
APP_DOMAIN=yourdomain.sk
POSTGRES_PASSWORD=changeMe_veryLongPassword123
NEXTAUTH_SECRET=changeMe_anotherRandomString456
# Generate secrets: openssl rand -base64 32

3. Spusti

docker compose up -d

Docker automaticky stiahne obrazy z Docker Hub, vytvorí databázu a spustí app. Migrácie sa spustia automaticky.

Konfigurácia .env

Otvor súbor .env a uprav nasledovné hodnoty:

APP_NAME="Bytove spolocenstvo Hlavna 12"
APP_URL=https://yourdomain.sk
APP_DOMAIN=yourdomain.sk
POSTGRES_PASSWORD=changeMe_veryLongPassword123
NEXTAUTH_SECRET=changeMe_anotherRandomString456
# Generate secrets: openssl rand -base64 32
&x26A0;️ Nikdy nezdieľaj súbor .env a nedávaj ho do Gitu. Súbor .gitignore ho automaticky vylučuje.

Prvé spustenie

Po spustení overte, že všetko beží:

docker compose ps

Všetky tri služby (app, db, caddy) musia mať status Up.

Otvor prehliadač na http://localhost:3000 – uvidíš prihlasovací formulár.

Seed dáta pre testovanie

Pre rýchle otestovanie môžeš načítať ukážkové dáta:

docker compose exec app npm run db:seed

Toto vytvorí testovacích vlastníkov, byty a jedno aktívne hlasovanie. Prihlasovacie údaje admina:

Email:  admin@test.sk
Heslo:  Admin123!
&x26A0;️ Seed dáta používaj len na testovanie. V produkcii ich nespušťaj.

Vlastná doména

Uprav .env:

APP_URL=https://bytovka.mojadomena.sk
APP_DOMAIN=bytovka.mojadomena.sk

Nastav DNS A záznam tvojej domény na IP adresu servera:

bytovka.mojadomena.sk.  A  1.2.3.4

DNS zmeny sa môžu šíriť 5–60 minút.

HTTPS (automaticky)

OpenResiApp používa Caddy ako reverse proxy, ktorý automaticky zaobstará a obnovuje SSL certifikát cez Let's Encrypt. Nemusíš nič ručne nastavovať.

&x2139;️ HTTPS funguje len ak je doména verejne dostupná. Na lokálnom testovania (localhost) je HTTP v poriadku.

Po nastavení domény reštartuj stack:

docker compose down
docker compose up -d

Zálohovanie

Všetky dáta sú v PostgreSQL databáze a v priečinku uploads/. Odporúčame zálohovať denne.

Automatická záloha

docker compose exec db pg_dump -U postgres resiapp | gzip > backup_$(date +%Y%m%d).sql.gz

Pridaj do cronu pre denné zálohy:

(crontab -l 2>/dev/null; echo "0 3 * * * cd /path/to/project && docker compose exec -T db pg_dump -U postgres resiapp | gzip > /backups/resiapp_\$(date +\%Y\%m\%d).sql.gz") | crontab -

Obnova zo zálohy

gunzip < backup_20260309.sql.gz | docker compose exec -T db psql -U postgres resiapp

Aktualizácia na novú verziu

Aktualizácia je jednoduchá – nové migrácie sa spustia automaticky pri štarte.

docker compose pull
docker compose up -d

Toto stiahne najnovší Docker image a reštartuje app. Migrácie databázy sa spustia automaticky – žiadne manuálne kroky.

&x26A0;️ Pred každou aktualizáciou urob zálohu databázy.

Admin účet

Pri prvom spustení v produkcii vytvor admin účet cez príkazový riadok:

docker compose exec app \
  npx tsx src/scripts/create-admin.ts \
  --email predseda@bytovka.sk \
  --name "Ján Novák"

Príkaz vytlačí dočasné heslo. Po prvom prihlásení si ho zmeň v nastaveníach.

Pridanie vlastníkov

Po prihlásení ako admin:

  • Choď do Nastavenia → Byty a vchody – vytvor vchody a byty s podielmi
  • Choď do Vlastníci → Pozvať vlastníka – zadaj email a priraď byt
  • Vlastník dostane email s odkazom na nastavenie hesla
&x2139;️ Spoluvlastnícky podiel (napr. 75/10000) nájdeš na liste vlastníctva z katastra nehnuteľností.

Prvé hlasovanie

Ako admin choď do Hlasovanie → Nové hlasovanie:

  • Zadaj názov a popis
  • Nastav dátum začiatku a konca
  • Voliteľne priraď sčítača hlasov pre papierové lístky
  • Klikni Spustiť hlasovanie

Všetkým vlastníkom príde email s odkazom. Výsledky sú viditeľné v reálnom čase. Po skončení môžeš vygenerovať PDF zápisnicu.