No description
- Python 42.1%
- HTML 41.6%
- CSS 11.9%
- JavaScript 3.7%
- Dockerfile 0.7%
| backend | ||
| frontend | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
LPS Krokava – webová aplikácia
Webová aplikácia Lesnej pasienkovej spoločnosti, pozemkového spoločenstva Krokava.
Štruktúra projektu
lps-krokava/
├── backend/ # Python / FastAPI
│ ├── app/
│ │ ├── main.py # vstupný bod (uvicorn app.main:app)
│ │ ├── database.py # SQLite schéma + predvolený obsah
│ │ ├── auth.py # JWT cookie, roly (vynútené na backende)
│ │ ├── routers/ # auth, content, documents, users, board
│ │ └── services/ # moderation (AI), mailer (Resend)
│ └── requirements.txt
├── frontend/ # čisté HTML / CSS / JS (bez frameworku)
│ ├── index.html # Domov
│ ├── novinky.html
│ ├── dokumenty.html
│ ├── valne-zhromazdenie.html
│ ├── kontakt.html
│ ├── prihlasenie.html # prihlasovacia obrazovka
│ ├── dashboard.html # dashboard člena (len čítanie + sťahovanie)
│ ├── admin.html # administrácia superadmina
│ ├── css/styles.css
│ └── js/common.js
├── data/ # SQLite databáza + nahrané súbory (Docker volume)
├── Dockerfile
├── docker-compose.yml # port 8004
├── .env.example
└── README.md
Roly a oprávnenia
| user (člen) | superadmin | |
|---|---|---|
| Prihlásenie | e-mail + heslo (databáza) | meno superadmin + heslo z .env |
| Verejný obsah | ✅ | ✅ |
| Dashboard: dokumenty na stiahnutie, nástenka, zmena vlastného hesla | ✅ | ✅ |
| Editácia čohokoľvek | ❌ (API vráti 403) | ✅ |
| Redakčný systém, dokumenty, viditeľnosť dokumentov | ❌ | ✅ |
| Správa účtov (vytváranie, editácia, heslá, odoberanie) | ❌ | ✅ |
| Odblokovanie príspevkov nástenky | ❌ | ✅ |
Oprávnenia sú vynútené na úrovni backendu – user nemá v API žiadnu možnosť editácie.
Funkcie
- Verejná časť: Domov, Novinky, Dokumenty, Valné zhromaždenie, Kontakt
- Dokumenty: superadmin pri každom dokumente rozhoduje, či je verejne viditeľný (aj pre neprihlásených) alebo len pre prihlásených – prepínateľné jedným tlačidlom, kontrolované aj pri sťahovaní
- Nástenka s AI moderáciou (Anthropic API): neslušné / od témy odbočujúce príspevky dostanú upozornenie a sú zablokované; odblokovať môže len superadmin
- Správa používateľov (superadmin):
- polia účtu: Meno, Priezvisko, e-mail, tel. číslo, poznámka
- editácia účtu, zmena hesla s opakovaním nového hesla
- tlačidlo „Znovu odoslať prístupové údaje" (vygeneruje nové heslo + e-mail)
- import e-mailov z Excelu (.xlsx / .csv, adresy v ľubovoľnom stĺpci)
- hromadné vygenerovanie účtov a odoslanie údajov na viacero e-mailov naraz
- E-maily cez Resend API, databáza SQLite (pre ~50 účtov ideálna)
Nasadenie (Debian 12 + Docker, port 8004)
# 1. Skopírujte projekt na server a vytvorte konfiguráciu
cp .env.example .env
nano .env # nastavte JWT_SECRET, SUPERADMIN_PASSWORD, ANTHROPIC_API_KEY, RESEND_API_KEY, EMAIL_FROM, APP_URL
# 2. Zostavte a spustite
docker compose up -d --build
# 3. Aplikácia beží na http://SERVER:8004
docker ps # kontajner lps_krokava, healthcheck /api/health
Dáta (databáza + nahrané dokumenty) sú v priečinku ./data – zálohujte ho. Kontajner sa reštartuje automaticky (restart: unless-stopped).
Neskoršie nasadenie na doménu
V Caddyfile (už máte Caddy na portoch 80/443) pridajte:
lpskrokava.sk {
reverse_proxy localhost:8004
}
a v .env zmeňte APP_URL=https://lpskrokava.sk + nastavte COOKIE_SECURE=1 a FORWARDED_ALLOW_IPS (IP Docker brány – aby ochrana prihlásenia videla skutočné IP návštevníkov), potom docker compose up -d --build.
Lokálny vývoj (bez Dockera)
python3 -m venv .venv
.venv/bin/pip install -r backend/requirements.txt
cp .env.example .env # doplňte hodnoty
cd backend && ../.venv/bin/uvicorn app.main:app --reload --port 8004
# otvorte http://localhost:8004
Prvé kroky po spustení
- Otvorte
http://SERVER:8004/prihlasenie.html - Prihláste sa ako
superadmin(heslo z.env) - Administrácia → Používatelia: vytvorte účty členov (jednotlivo alebo importom z Excelu) – prístupové údaje im prídu e-mailom
- Administrácia → Obsah stránok / Novinky / Dokumenty: naplňte obsah
Poznámky
- Hero fotografia:
frontend/hero.png(vygenerovaná cez Higgsfield / Nano Banana Pro). Bez nej sa zobrazí zelený gradient. Ikony kariet sú vfrontend/icons/. - Bez
ANTHROPIC_API_KEYje moderácia vypnutá (príspevky prejdú bez kontroly). Pri výpadku API sa príspevky pozdržia na schválenie superadminom. - Bez
RESEND_API_KEYsa účty vytvoria, ale e-maily sa neodošlú – administrácia to zreteľne oznámi pri každom účte. - Limity: dokument max. 20 MB, hromadný import max. 200 e-mailov, príspevok max. 2000 znakov.
- „Znovu odoslať prístupové údaje" zmení heslo člena až po úspešnom odoslaní e-mailu – pri zlyhaní odoslania zostáva pôvodné heslo platné.