Yearly Project (2340311) @ Technion (2026)
GhostHouses is a municipal web system for tracking vacant/rehabilitation buildings. It supports structured data entry, import/export workflows, an audit log, and presentation‑ready building cards. The system is built with a .NET backend, React frontend, and PostgreSQL, and is fully containerized for local development.
- Create / edit / view building details with categorized fields.
- Mandatory field validation and conditional rules (e.g., Rehab Status only for relevant classification).
- Advanced filters (including date range for last update).
- Table sorting by clicking column headers.
- Building actions: edit, delete (with safeguards), export to Excel, export building card, and open logs.
- Supports 0–1 image per building (used in building card export).
- Full audit trail with per‑field changes.
- Filters by user/date/fields and sorting by header click.
- Log table shows key fields directly (no dropdown rows).
- Logs are immutable (no delete UI).
- Excel export respects current UI field order and labels.
- Selection‑based export (headers only if nothing selected).
- Export with images as ZIP (Excel + images) or Excel‑only.
- Import with staged validation:
- Stage 1: fix missing/invalid mandatory fields.
- Stage 2: resolve conflicts (skip/replace/add‑anyway).
- Duplicate detection (by address and by ID) with explicit resolution.
- Dedicated Streets page with add/edit/view.
- Import/export with conflict resolution (StreetId uniqueness).
- Selection‑based export (headers only if none selected).
- “No Street Name” is reserved for buildings only (StreetId = -1).
- User management (create/edit/view) in popups.
- Role model (Viewer / Editor / Admin).
- OTP reset actions.
- Export single or multiple building cards as PPTX.
- Each selected building becomes a slide in a deck.
- Template‑based with image replacement and aspect‑ratio preservation.
- Converter page to migrate legacy client templates into the current system format.
- Real OTP implementation and stronger 2FA enforcement.
- External municipality system sync (data integration).
- Deployment on client Windows Server environment.
- Update building card template (awaiting client template).
- Backend: ASP.NET Core (.NET 8, C#)
- Frontend: React (Vite)
- Database: PostgreSQL
- Testing: xUnit (WebServer.Tests) for backend unit tests (run locally).
- Containerization: Docker + Docker Compose
- CI/CD: GitHub Actions (issue guard comment-only workflow)
git clone https://github.com/bbdaria/GhostHouses.git
cd GhostHouses/project
docker compose up -d --build- Frontend (Nginx):
https://localhost:443(host port 443 -> container 443). - Backend (ASP.NET Core): internal only,
http://backend:8080(no host port mapping). - Database (PostgreSQL): internal only,
db:5432. - pgAdmin:
https://localhost:8443(host port 8443 -> container 443). - Networks:
app-net(frontend ↔ backend),db-net(backend ↔ db),admin-net(pgAdmin ↔ db).
Main command (run from project/):
cd project
docker compose down -v && docker compose up -d --buildRebuild without wiping data:
docker compose down && docker compose up -d --buildIf you need to run without internet access, use the pre‑pulled image bundle in:
project/offline-images/ghosthouses-images.tar
Commands:
cd project
docker load -i offline-images/ghosthouses-images.tar
docker compose down -v
docker compose up -d --build --pull=neverIf the images were already built once, you can just run:
cd project
docker compose up -dSee project/offline-images/OFFLINE_IMAGES_README.docx for details.
project/web-server/backend– ASP.NET Core backendproject/web-server/frontend– React frontenddocs/– project documentation and submission filestests/– automated tests.github/– GitHub workflows and templates
Documentation note: Stage A submission artifacts (docx + UML) live under docs/Stage A submission/.
Internal technical notes live under docs/internal/.
See docs/CONVENTIONS.md for:
- Branch naming (
Issues/#<issue-number>-<slug>) - Issue → branch mapping
- Required metadata (milestone, labels, parent User Story)
- Status definitions (Backlog / Current Sprint / Doing / Candidate / Done)
- Approval rules and time tracking
GitHub Actions runs the issue‑guard workflow on issue events and daily to comment on missing required metadata. Build/test pipelines are run locally by the team.
The frontend and pgAdmin use local HTTPS. Self‑signed certs live in project/certs/ (ignored by git).
If missing, generate them locally (see project/certs/README_Certs.docx for the exact command).
Maintained by the GhostHouses team.