Skip to content

Latest commit

 

History

History
266 lines (245 loc) · 17.3 KB

File metadata and controls

266 lines (245 loc) · 17.3 KB

GroundShare — Features List

Presentation-ready inventory of every user-facing and behind-the-scenes feature. Grouped by area; duplicates merged. For the technical/architectural deep-dive (controllers, caching strategies, integrations config) see features.md.


Auth & Accounts

  1. Welcome / landing screen — First entry point for guests
  2. Login — Email + password sign-in
  3. Register — New account creation
  4. Google OAuth sign-in — "Sign in with Google" (ID token validated locally)
  5. Social login buttons (web + native) — Unified Google login UI across platforms
  6. Logout — Revoke session + clear cookie
  7. Forgot password — Request a reset link
  8. Reset password — Set new password via token, revoke all sessions
  9. Password reset email (Resend) — Sends the reset link by email
  10. Complete profile — Fill missing details after first login
  11. Onboarding flow — Guided setup for new users
  12. Skip onboarding — Bypass onboarding steps
  13. First-time questions — Initial survey / preferences capture
  14. Phone number update — Edit phone on profile
  15. Account deletion (with confirmation modal) — Permanently remove the account, confirmed first
  16. Auth security stack — JWT identity for protected routes · access token kept in memory only (XSS hardening) · refresh-token rotation (single-winner) · token reuse detection (revokes sessions) · httpOnly refresh cookie on web · refresh token in body on native · CSRF guard on the cookie path · constant-time BCrypt verify
  17. Registration name moderation (Content Safety) — Blocks abusive display names at signup

Address Search & Geo

  1. Address search — Look up any address
  2. Address info panel (bottom sheet, tabs) — Sliding results panel with tabbed sections
  3. Overview section — Summary stats for the address
  4. Planning status section — Construction / permits / plans view
  5. Events section — Community reports for the address
  6. AI summary section — AI-generated address overview
  7. Active planning-items count chip — Live badge of non-completed planning + disruption items, shown on the תכנון tab
  8. Forward geocoding — Address → coordinates
  9. Reverse geocoding — Coordinates → address
  10. Reverse-geocode fallback for NULL-coord locations — Recovers coords when missing
  11. Places autocomplete (Google) — Google address suggestions
  12. Address autocomplete (data.gov.il / CBS) — City / street suggestions from open data
  13. Parcel info (gush / chelka) — Land parcel identifiers
  14. Planning status lookup — Fetches official planning data (Tel Aviv GIS, iplan/MAVAT fallback)
  15. MAVAT plan-lifecycle events — National plan milestones (deposited / approved / gazette) shown when outside Tel Aviv
  16. Nearby disruptions lookup — Official municipal disruptions around a point
  17. Cross-layer disruption deduplication — Collapses the same job listed across overlapping GIS layers (polygon + point + night-work) into one entry, keeping the best geometry
  18. Disruption coordinate backfill — Geocodes the address for GIS rows missing geometry so they still get a marker + distance (coordSource: geometry | geocoded)
  19. Zoning (ייעוד) chip popover — Expands all zonings on tap
  20. Active permit count chip — Shows live permit count
  21. Location resolve (address → location_id) — Maps an address to a DB location
  22. Location stats — Aggregated stats for a location
  23. Deep-linkable address search — Open a specific report via URL / state

Interactive Map

  1. Google Maps rendering — Base interactive map
  2. Roadmap / streets view — Standard street map mode
  3. Satellite view toggle — Switch to aerial imagery
  4. Tel Aviv GIS satellite tiles — TLV orthophoto overlay
  5. Satellite labels overlay — Street labels on satellite view
  6. Map overlay system (markers / circles) — Screens push markers / circles to the map
  7. Smooth pan-to — Animated camera movement
  8. Drop-a-pin on map (+ prompt card) — Place a pin by tapping; action card appears for it
  9. Map controls toggle — Show / hide map controls
  10. Map layer toggle — Switch map layers
  11. Radius circle for nearby reports — Visualizes the search radius
  12. Persistent map layout — Map stays mounted across screens 52a. Building footprint overlay (BuildingsOverlay) — Draws official TLV building outlines (GIS layer 513) as a single google.maps.Data layer; viewport-tiled (0.01° grid), parallel-fetched, deduplicated by geometry string (not id_binyan), and anti-flicker (layer attached once, visibility toggled via setStyle, no per-feature animation, mutations only on debounced idle) 52b. House-number labels overlay (AddressNumbersOverlay) — Renders TLV house numbers (GIS layer 527) as map labels, viewport-fetched in native EPSG:2039 and reprojected; zoom-gated and separately toggleable alongside the building-footprint layer in the map controls 52c. Persistent home-address marker (HomeMarker) — The user's home address is rendered once in MapLayout so it stays visible across all map screens

Events, Voting, Comments & Reviews

  1. Community event reporting — Residents report disruptions
  2. Multi-step event creation (location / details / description) — Wizard for new reports
  3. Event cards — Compact report display
  4. Event success screen — Confirmation after creating a report
  5. Nearby reports list — Reports around the user
  6. Nearby event cards — Cards for nearby community reports
  7. Nearby disruption cards — Cards for official disruptions
  8. Distance-sorted nearby results — Events + disruptions decorated with and ordered by distance from the user
  9. Event voting (upvote / downvote) — Community signal on reports
  10. Comments (with live character counter) — Discussion on a report
  11. Reviews — User reviews on a location
  12. Add / edit review (with live character counter) — Submit or update a review
  13. Text length limits — Comments / reviews / event descriptions capped, with client-side counters
  14. Text moderation (Content Safety + Hebrew blocklist) — Filters abusive text

Favorites

  1. Favorites / bookmarks — Save addresses
  2. Favorite toggle — Add / remove a bookmark
  3. Favorite check — Check if a location is saved
  4. Saved address cards — List of saved addresses

Address Comparison & AI

  1. Address comparison (0–100 score) — Side-by-side address scoring
  2. Rule-based scoring (penalty-from-ceiling) — Starts high, deducts for disruptions
  3. Confidence-weighted sentiment scoring — Reviews adjust score by data confidence
  4. Data-coverage confidence (backend) — Quality flag for how much data backs a score
  5. Cross-layer GIS dedup in scoring — Comparison reuses the disruption dedup so overlapping layers aren't double-counted
  6. Winner banner — Highlights the better address
  7. Winner reasons — Explains why one address won
  8. Comparison table — Criterion-by-criterion breakdown
  9. Comparison history — Past saved comparisons
  10. AI address summary (Gemini) — LLM-written address summary
  11. AI summary caching — Avoids re-calling the LLM for same input
  12. AI Q&A assistant — Ask free-text questions in the dictionary
  13. Deterministic local summary fallback — Used when the AI key / call fails

Notifications

  1. Push notifications (FCM) — Device push delivery (web + native)
  2. In-app notification feed — Notification list inside the app
  3. Notification deep-linking — Tap lands on the relevant report
  4. Notification bell badge — Unread count on the bell
  5. Drawer notification count badge — Unread count in the menu
  6. Notification summary banner — Top-of-feed summary
  7. Mark notification seen — Clears unread state
  8. Dismiss notification — Remove from feed
  9. Location subscription toggle (+ check) — Follow / unfollow a location and query state
  10. GPS proximity notifications — Alerts for events near the user
  11. GPS preference get / set / delete — Manage GPS notification settings
  12. Device registration (FCM token) — Registers the push token
  13. Invalid token auto-cleanup — Removes dead FCM tokens
  14. FCM fan-out on event creation — Notifies home-address + GPS-proximity subscribers (200 m)

Gamification (Personal Area)

  1. Personal area screen — User's gamification dashboard
  2. XP system — Earn points for activity
  3. Levels (7 tiers) — Rank progression from XP (תושב חדש → אגדה עירונית)
  4. Badges from stats — Awards based on user activity
  5. Weekly missions (ISO-week rotation) — Rotating weekly goals
  6. Mission claim + XP reward — Claim completed missions for XP
  7. Activity streak — Consecutive-activity tracking
  8. Comment-count stat tracking — Comments-written stat fed into missions / progress
  9. Stat boxes / cards — Visual stat tiles
  10. Last-activity deep-linking — Jump back to the exact item / tab

Clustering, Relevance & Onboarding

  1. Neighborhood clustering (ML / K-Means) — Groups neighborhoods by livability
  2. Auto-K via silhouette score — Auto-picks cluster count
  3. Livability score per neighborhood — Computed score per area
  4. Good / medium / bad neighborhood labels — Human-readable cluster labels
  5. Cluster overlay toggle — Show / hide clusters on map
  6. Neighborhood overlay — Renders neighborhood polygons
  7. Neighborhood detail sheet — Tapping a neighborhood opens details
  8. Clustering diagnostics — Admin / debug clustering info
  9. Event relevance check-ins — Ask reporters if a report is still relevant
  10. Relevance confirmation modal — UI to confirm / dismiss relevance
  11. Pending confirmations — Reports awaiting the user's confirmation
  12. Confirm relevance (ownership-enforced) — Only the reporter can confirm
  13. Onboarding questions — Collects user role / preferences (saved via PUT /users/onboardingsp_SaveOnboarding)
  14. Onboarding thank-you screen — Post-questions confirmation

Reference Data & Uploads

  1. Cities reference data — City list for pickers
  2. Streets reference data — Streets per city
  3. Event types reference data — Categories for reports
  4. Plan status reference data — Planning status options
  5. Address part normalization — Cleans / normalizes address text
  6. File / image uploads — Attach images to content
  7. Image upload modal — Upload UI
  8. Browser-side image compression — Shrinks images before upload
  9. 5-layer file validation — Multi-step upload safety checks
  10. SAS-signed blob URLs — Time-limited private file access

Static Pages & Settings

  1. Smart dictionary (term lookup) — Planning-term glossary
  2. FAQ — Frequently asked questions
  3. Legal — Terms / privacy pages
  4. Settings & profile — User settings hub
  5. Home address management (+ dedicated editor) — Set / update home address 136a. Contact / bug-report form — In-app modal that emails the support inbox via Resend (replaces the old mailto: link that failed silently on mobile); input HTML-encoded server-side, rate-limited
  6. Drawer / hamburger menu — Side navigation menu
  7. Top search bar — Persistent search entry
  8. Bottom navigation bar — Primary app navigation

PWA & Offline

  1. PWA offline support — App works without network
  2. PWA install prompt / banner (A2HS) — Prompts to add the app to home screen
  3. Service worker caching (Workbox) — Caches assets / responses
  4. Per-domain runtime cache strategies — Tailored caching per source
  5. NetworkOnly live-data bypass — Forces fresh data for time-sensitive APIs
  6. Offline banner (network status) — Shows when device is offline
  7. Firebase messaging service worker — Handles background push

Native (Capacitor)

  1. iOS shell — Native iOS app wrapper
  2. Android shell — Native Android app wrapper
  3. Camera — Capture photos natively
  4. Geolocation (coarse + high-accuracy watchers) — Native location tracking
  5. Push notifications — Native push integration
  6. Filesystem — Native file access
  7. Keyboard — Native keyboard handling
  8. Status bar — Native status-bar styling
  9. Splash screen — Native launch screen
  10. Android hardware back button — Handles the OS back button
  11. Swipe-back gesture — Swipe-to-go-back navigation
  12. Safe-area insets — Respects notches / home indicators

UI / UX

  1. Hebrew / RTL layout — Right-to-left interface
  2. Heebo + Poppins fonts — Hebrew + Latin typography
  3. Aurora background + decorations — Animated gradient backdrop and decorative elements
  4. Animated collapse — Smooth expand / collapse sections
  5. Scroll hint — Cue that content scrolls
  6. Onboarding app tour (replayable) — Guided walkthrough with step highlights, re-runnable
  7. Phone-frame desktop preview — Mobile frame shown on desktop
  8. Motion animations — UI motion / transitions
  9. Click-outside handling — Closes popovers on outside click
  10. Debounced inputs — Throttles rapid input events

Backend Cross-Cutting

  1. Rate limiting (per-endpoint + global) — Throttles abuse per IP
  2. FluentValidation input validation — Schema-based request validation
  3. Global exception handling (ApiResponse envelope) — Uniform error responses
  4. Security headers (CSP, HSTS, X-Frame-Options, etc.) — Hardening HTTP headers
  5. Serilog logging (two-stage bootstrap) — Structured logging
  6. PII log redaction — Masks sensitive data in logs
  7. Request-logging middleware — Logs requests (excludes secrets)
  8. Strongly-typed options with ValidateOnStart — Config validated at startup
  9. CORS policy — Restricts allowed origins
  10. Swagger / OpenAPI (dev) — API explorer in development
  11. Sensitive-action audit log — Records security-relevant actions
  12. ADO.NET DAL (stored procedures, no EF) — Manual data access via SPs 180a. Real-client-IP resolution behind Cloudflare — Forwarded-headers middleware + CF-Connecting-IP so rate limiting and audit logs see the true caller, not the proxy hop 180b. UTC date serialization — JSON converters normalize all API DateTimes to UTC ISO-8601, so clients parse dates consistently

Background Services

  1. Neighborhood seed service (startup, one-shot) — Seeds neighborhood polygons
  2. Clustering background job — Wakes hourly, recomputes neighborhood clusters when the last result is >1 day old
  3. Relevance background job — Wakes every 6h, prompts reporters to confirm relevance when the last prompt is >20h old
  4. GitHub Actions daily cron pokes — cluster-daily / relevance-daily hit the admin run-now endpoints (the free-tier App Service sleeps on idle, so the in-process timers alone aren't enough) 184a. Token-protected admin run-now endpoints — Clustering / relevance recompute gated by an X-Admin-Token header (Key Vault Admin--Token); runs fire-and-forget (202) so the App Service request timeout can't kill them, and the last-run timestamp updates only on success

CI/CD & Infra

  1. Azure App Service hosting (API + frontend) — Cloud hosting
  2. CI pipeline (build, typecheck, unit tests, audit) — Automated checks on push; backend xUnit + frontend vitest run on every PR, vulnerability checks block merge 186a. Security-header static host — Frontend served by a zero-dep server.cjs that injects CSP (report-only), HSTS, X-Frame-Options, nosniff, Permissions-Policy
  3. CD pipeline (gated deploy on main) — Controlled production deploys
  4. Post-deploy health checks — Verifies deploy succeeded
  5. Health check endpoint — Liveness probe for load balancer
  6. Secret scanning (gitleaks, pre-commit + CI) — Blocks committed secrets
  7. CodeQL security analysis — Static security scanning
  8. Single re-runnable DB schema script — Idempotent schema source of truth
  9. ResetData script (wipe user data, keep schema) — Resets DB for testing

External Services & Integrations

Each row is one external dependency: what we use it for and the account/service behind it.

  1. Azure subscription (Israel Central) — Cloud platform hosting all infrastructure
  2. Azure App Service — Hosts the API and the frontend
  3. Azure SQL Database — Primary datastore (managed SQL Server)
  4. Azure Key Vault — Production secrets via Managed Identity
  5. Azure Blob Storage — Image / file storage
  6. Azure AI Content Safety — Text / image moderation API
  7. Hebrew blocklist moderation — Local Hebrew abuse filter (runs before Content Safety)
  8. Azure Application Insights — Telemetry, logs, traces, metrics
  9. Google Cloud / Maps Platform — Maps, geocoding, Places autocomplete
  10. Google Gemini API — AI summaries and Q&A
  11. Google OAuth 2.0 — "Sign in with Google" identity provider
  12. Firebase project (FCM) — Push messaging + client config
  13. Resend — Transactional email: password-reset links + in-app contact/bug-report submissions (domain verified in Resend dashboard)
  14. Tel Aviv ArcGIS (gisn.tel-aviv.gov.il) — Municipal GIS disruption / plan layers + satellite tiles
  15. iplan / MAVAT (ags.iplan.gov.il) — National planning data (legacy TLS)
  16. data.gov.il (CBS) — Open-data city / street datasets
  17. Cloudflare — DNS for groundshare.app; proxies api.groundshare.app → Azure API (same-site so the refresh cookie works)
  18. groundshare.app custom domain — Production domain added via Cloudflare DNS
  19. GitHub — Source repo + Actions CI/CD + CodeQL + secret scanning
  20. @capgo/capacitor-social-login — Native Google login plugin