SW

SWEIQO

Fractional Real Estate Platform

Technický návrh produkční aplikace

Odpovědi na otázky pro vývojovou firmu (bod 16) · Plnění povinných výstupů (bod 14) · Akceptační kritéria (bod 15)

Verze zadání: v1 Referenční prototyp: v65 Zpracováno: září 2026 Status: Podklad pro schůzku s klientem
Odpovědi na otázky pro vývojovou firmu
13

Jakou architekturu a technologický stack navrhujete a proč?

Backend
ASP.NET Core 9C# · REST API
Databáze
MS SQLEntity Framework Core · Migrace
Frontend
React SPATypeScript · Vite
Autentizace
ASP.NET IdentityJWT Bearer tokeny
Souborový storage
Privátní složkaMimo wwwroot · API přístup
E-mail
MailKitSMTP · Transakční zprávy
Deploy
FTP + PowerShelldotnet publish → aspone.cz
PWA
Service WorkerWeb App Manifest · Offline cache

Proč ASP.NET Core 9 (C#)?

  • Prověřený stack na stejném hostingu – identický framework provozujeme na ekobio.org / aspone.cz u projektů KikiAI, MartinFlegl, PatriotiTrutnov, IPCZ a dalších. Víme přesně jak jej nasadit, jak ladí s IIS a jak řešit problémy.
  • Enterprise-grade, Microsoftem udržovaný – dlouhodobá podpora, pokud projekt převezme jiný tým, .NET vývojáře snadno najde. Jeden z nejrozšířenějších backendových ekosystémů.
  • Silné typování v C# – chyby v obchodní logice zachytíme při kompilaci, ne za běhu v produkci. U finančních dat a přístupových práv je to zásadní.
  • ASP.NET Core Identity – vestavěná, kryptograficky prověřená správa uživatelů a rolí. Nemusíme psát vlastní bezpečnostní kód.
  • EF Core migrace – každá změna databázového schématu je verzovaná, zdokumentovaná a opakovatelná.

Proč React SPA jako frontend?

  • Prototyp v65 je komplexní aplikace (záložky, modály, dynamický stav kalendáře, přepínání nemovitostí) – React umožní čistou komponentní strukturu odpovídající schválenému UX.
  • Největší frontendový ekosystém – nízká závislost na jednom vývojáři.
  • Alternativa Blazor (C# i ve frontendu) je validní volba pro čistě .NET tým – výsledek bude vizuálně totožný, rozhodnutí učiníme ve fázi 0.
14

Jak byste řešili autentizaci, role a ochranu klientských dat?

Základní princip: Bezpečnost je vynucena na serveru u každého API volání. Skrýt tlačítko v prohlížeči nestačí.

Přihlášení:

  • E-mail + heslo, hash přes bcrypt – hesla nikdy neukládáme v čitelné podobě
  • Server vydá JWT token (expiruje za několik hodin) + refresh token pro prodloužení session
  • Reset hesla: jednorázový odkaz zaslaný na e-mail, platí 1 hodinu

Proč JWT tokeny?

  • Bez stavovosti na serveru – funguje i při škálování nebo restartu aplikace
  • Frontend (SPA/PWA) si token bezpečně uloží a připojuje ke každému požadavku

Role a oprávnění:

RoleOprávněníPoznámka
Klient / investorVidí výhradně svá data (filtr OwnerId = currentUser na každém dotazu)Nejpřísnější izolace
Administrátor SWEIQOSpráva všech entit – klienti, nemovitosti, podíly, termíny, dokumenty
SuperadminSpráva rolí, systémových nastavení, auditů
Lokální partnerOmezený přístup ke konkrétní nemovitostiBudoucí fáze, architektura počítá s touto rolí od začátku

2FA pro administrátory: TOTP (kompatibilní s Google Authenticator / Authy) jako povinný druhý krok pro role Admin a Superadmin.

15

Jaký hosting doporučujete a jaké budou orientační náklady?

Testovací prostředí: ekobio.org (aspone.cz, Windows hosting) – server již provozujeme, nulové extra náklady.

Produkce: vlastní doména SWEIQO nasazená na aspone.cz, při větším růstu migrace na VPS nebo Azure.

Počet uživatelůHostingDatabázeCelkem / měsíc
100Stávající Windows plánStávající MS SQL~500–800 Kč
1 000Vyšší Windows plán asponeVětší plán MS SQL~1 500–3 000 Kč
10 000VPS nebo Azure App ServiceAzure SQL / dedikovaný~5 000–15 000 Kč

Proč aspone.cz?

  • Máme na tomto hostingu fungující projekty a víme jak se chová – žádná neznámá prostředí, žádné překvapení při nasazení
  • Česká firma, fakturace v CZK, česká podpora
  • ASP.NET Core je přenositelný na libovolný server nebo cloud – žádný vendor lock-in vůči aspone.cz specifickým funkcím
16

Jak budete řešit ukládání citlivých dokumentů a přístupová práva?

  • Soubory uloženy do privátní serverové složky mimo wwwroot – nikdy nejsou veřejně dostupné URL
  • Přístup výhradně přes zabezpečený API endpoint: GET /api/documents/{id}/download
  • Backend ověří: a) je uživatel přihlášen? b) má oprávnění ke konkrétnímu dokumentu?
  • DB záznam obsahuje: typ, vlastník/klient, nemovitost, datum, verze, přístupová práva
URL ke stažení dokumentu nikdy není odhadnutelná (žádné /documents/smlouva-jan-novak.pdf). Přístup je vždy ověřen tokenem na backendu.
17

Jak bude probíhat zálohování a obnova?

  • Databáze: Automatické zálohy ze strany aspone.cz + pravidelný export přes skript na záložní úložiště (Google Drive / BackBlaze B2), frekvence: denně
  • Soubory (dokumenty): Denní záloha adresáře dokumentů mimo server
  • Obnova: Postup zdokumentován a reálně otestován ještě před spuštěním prvních klientů – je to akceptační kritérium č. 13
18

Jakým způsobem byste napojili Booking.com / Airbnb?

Doporučení: přes profesionální PMS / channel manager. NEVYVÍJET vlastní.
Channel manager je komplexní produkt sám o sobě – stavět jej od nuly by bylo dražší než celý SWEIQO.

Plán po fázích:

  • Fáze 1–2: Rezervace se spravují ručně nebo importují přes admin panel SWEIQO
  • Fáze 3: Napojení na PMS s channel managerem (Smoobu, Hostaway, Lodgify – výběr dle zemí klienta)
  • Technicky: SWEIQO vytvoří webhook endpoint POST /api/pms/sync, kam PMS posílá nové rezervace → automatický zápis do DB
19

Co z prototypu v65 lze využít a co je vhodnější přepsat?

CoJak využít
Schválená UX logika a flowPřesně zkopírovat do komponent – to je referenční vzor
Barevná paleta a dark themeExtrahovat jako CSS proměnné / design tokeny
HTML struktura komponentJako vzor pro React komponenty
Obchodní logika (výpočty v JS)Přepsat do C# (backend) + TypeScript (frontend), nepřebírat starý JS
Hardcoded testovací dataNahradit real-time API voláním na backend
Soubor navrh_mobil.html slouží jako specifikace chování a vizuálu, ne jako zdrojový kód produkce.
20

Kolik práce odhadujete pro fáze 0, 1 a 2 samostatně?

Fáze 0

Technický návrh

Architektura, DB schéma, projekt, CI/CD skripty, schválení klientem

20–30 h hodin
Fáze 1

Jádro systému

Auth, admin, klienti, nemovitosti, podíly, kalendář, základy dokumentů

120–200 h hodin
Fáze 2

Klientská část

Pronájmy, výnosy, hlasování, prodej podílu, příležitosti, notifikace

80–140 h hodin
Fáze 3+

Integrace & škálování

PMS/channel manager, push, platby, pokročilé funkce

TBD dle rozhodnutí

Odhad zahrnuje vývoj, unit testy obchodní logiky a QA průchod před předáním každé fáze.

21

Co z MVP vypustit, aby bylo možné bezpečně spustit první klienty rychleji?

✓ Musí být v MVP

  • Bezpečné přihlášení a oddělení dat klientů
  • Správa nemovitostí, podílů a slotů
  • Rotační kalendář (sobota–sobota)
  • Základní zobrazení výnosů a dokumentů
  • Admin panel bez nutnosti programátora

→ Odložit na fázi 3–4

  • Hlasování o cenové politice pronájmu
  • AI tržní odhad ceny podílu
  • Automatické 90denní připomínky
  • PWA push notifikace (zatím e-mail)
  • Export do účetnictví
  • Elektronický podpis
22

Jak zajistíte, aby SWEIQO nebylo závislé na jediném vývojáři?

  • Git repozitář vlastní a spravuje SWEIQO (GitHub/GitLab firemní účet) – vývojář není owner
  • Standardní C#/.NET stack – může převzít jakýkoli .NET vývojář bez proprietárních znalostí
  • Dokumentace nasazení jako součást každé fáze (jak spustit lokálně, jak deployovat, jak obnovit)
  • Všechny přístupy (hosting, DB, SMTP, domény, API klíče) registrovány na SWEIQO e-mail/účet
  • Staging prostředí – nový vývojář pracuje na testovacím serveru bez přístupu k produkci
23

Jaké testy doporučujete automatizovat od začátku?

Typ testuCo testovatNástroj
Unit testy (C#)Rotační logika, výpočet sezón, fond údržby 5 %, kapacita x/8xUnit
API integrační testyPřihlášení, role, klient A ≠ data klienta BxUnit + HttpClient
Smoke testy UIZákladní průchody po každém deployiPlaywright
Manuální QAPlný průchod Android/iOS/desktop před každým releasemDle checklistu v65
Proč automatizovat právě toto? Rotační kalendář a výpočty fondů jsou nejkomplexnější logika v systému. Chyba má přímý finanční dopad na klienty – unit testy ji zachytí okamžitě při každé změně kódu.
24

Jak bude probíhat předávání zdrojového kódu, dokumentace a přístupů?

  • Git repozitář dostupný pod SWEIQO účtem, vývojář odstraněn jako owner
  • Dokumentace: jak spustit lokálně, jak deployovat, jak obnovit ze zálohy
  • Seznam všech externích služeb a přihlašovacích údajů
  • Staging prostředí funkční a oddělené od produkce
  • Provedena finální akceptace proti checklistu v65 a technickému zadání v1
Povinné výstupy dodavatele před zahájením vývoje (bod 14)
#Požadovaný výstupStavKde
1Návrh technické architektury✓ SplněnoČást A, otázka 13
2Návrh autentizace a oprávnění✓ SplněnoČást A, otázka 14
3Návrh datového modelu a hlavních vazeb→ PřipravitER diagram – doplníme po schůzce
4Návrh verzování a nasazování✓ Splněnodotnet publish + FTP skripty (stávající workflow)
5Návrh zálohování a obnovy✓ SplněnoČást A, otázka 17
6Návrh monitoringu a logování✓ SplněnoSerilog + stdout log soubory na aspone.cz
7Popis řešení PWA✓ SplněnoService Worker + Manifest v React buildu
8Seznam externích služeb a náklady✓ SplněnoČást A, otázka 15 (aspone.cz, SMTP, PMS)
9Odhad práce a ceny po fázích✓ SplněnoČást A, otázka 20
10Identifikace rizikových bodů→ DoplnitViz níže
11Integrační strategie Booking/Airbnb✓ SplněnoČást A, otázka 18
12Potvrzení vlastnictví kódu a přístupů SWEIQO✓ SplněnoPotvrzujeme. Součástí smlouvy.

Identifikované rizikové body (výstup č. 10)

Právní struktury nemovitostí v různých zemích

Aplikace musí být flexibilní – přímé spoluvlastnictví, lokální s.r.o., jiná vhodná struktura. Potřeba upřesnit pro první konkrétní nemovitosti ještě před fází 1.

Rotační kalendář při změně vlastníka podílu

Slot nesmí být narušen při prodeji podílu. Vyžaduje přesnou specifikaci edge-cases (co se stane s termíny in-flight, rezervacemi apod.).

Fond údržby při vlastním užití

Referenční tržní hodnota pronájmu musí být někde uložena – kdo ji zadává? Admin ručně? Automaticky z dat trhu? Potřeba rozhodnutí před implementací.

Standardizace lokalit

Kdo a kdy schvaluje alias „Mallorka" → „Mallorca"? Potřeba definovat workflow pro admin frontu a kdo má pravomoc schvalovat.

Sdílená MS SQL instance na aspone.cz

Sdílíme DB server s ostatními projekty. Nutno prefixovat tabulky (sweiqo_) a sledovat výkon. Při větším počtu klientů uvažovat o dedikované DB instanci.

PWA na iOS / Safari

Safari má omezení pro Service Worker a push notifikace. Potřeba otestovat rozsah funkčnosti a jasně komunikovat klientům co iOS zvládne a co ne.

Akceptační kritéria první ostré verze (bod 15) – jak je splníme
🔒

Klient A nevidí data klienta B ani změnou URL / API požadavku

Každý API endpoint filtruje podle OwnerId = currentUser. Automatický integrační test simuluje útok (přístup s tokenem klienta A na data klienta B) a musí vrátit 403.

🏠

Přepnutí nemovitosti načte správný podíl, slot, kalendář, výnosy a dokumenty

Backend ověří vlastnictví podílu před vrácením dat. Přepínač UI volá /api/properties/{id}/context a vrací kompletní kontext pro daného klienta.

📅

Kalendář správně generuje turnusy a sezóny napříč roky

Unit testy pokrývají přestupné roky, přechod roku, okrajové týdny. Rotační logika je testována nezávisle na UI.

📋

Důležité změny jsou dohledatelné v auditním logu

Tabulka sweiqo_auditlog – každá citlivá operace zapíše: kdo, kdy, co, stará a nová hodnota.

👤

Admin dokáže založit klienta, nemovitost a přidělit podíl bez zásahu programátora

Admin UI s formuláři napojenými na REST API. Bez přístupu k serveru nebo DB konzoli.

📄

Admin dokáže nahrát dokument a určit kdo ho vidí

Upload přes /api/documents/upload + výběr oprávnění (konkrétní klient, nemovitost nebo všichni admini).

💰

Finanční detail dohledatelný ke konkrétnímu období a podílu

Tabulky sweiqo_income_records a sweiqo_cost_records vázané na ShareId + Period. Filtrování a export po obdobích.

🔢

Nová příležitost správně počítá x/8 včetně 1/8 SWEIQO

Unit test: vytvoření příležitosti, ověření že dostupná kapacita = 7 (ne 8), pokus o překročení vyvolá chybu validace.

📍

Vlastní poptávka přijme ručně zadanou lokalitu a označí ji ke standardizaci

Pole RawLocationText + StandardizedLocationId (nullable). Nejasné případy → admin fronta ke kontrole.

🚨

Rychlý výkup vytvoří v adminu urgentní úkol

SaleRequest s typem QuickBuyout automaticky vytvoří záznam v sweiqo_tasks s prioritou Urgent a notifikace adminovi.

📱

Aplikace projde kontrolou na Android, iOS a desktopových prohlížečích

Povinný manuální QA průchod dle checklistu v65 před každým releasem. Výsledek se písemně odsouhlasí.

📐

Dlouhé názvy, šesticiferné částky, CZK/EUR nerozbijí layout

CSS grid/flexbox s min-width: 0, overflow: hidden, text-overflow: ellipsis. Explicitně testováno v QA průchodu.

♻️

Existuje otestovaný postup obnovy ze zálohy

Dokumentace + reálné provedení obnovy na stagingu před ostrým spuštěním. Bez úspěšného testu nelze projekt předat do produkce.

Shrnutí pro klienta

Navrhovaný stack ASP.NET Core 9 + MS SQL + React + aspone.cz není náhodná volba – je to přímé pokračování technologie, kterou úspěšně provozujeme u více projektů na stejném serveru. Víme přesně jak jej nasadit, testovat i obnovit ze zálohy.

Zároveň jde o průmyslový standard, který umožňuje kdykoli přivést nového vývojáře nebo projekt předat jinému týmu bez vendor lock-inu.

Splnění všech 12 výstupů bodu 14 a 13 akceptačních kritérií bodu 15 je součástí naší nabídky – nikoli volitelný bonus.