FloCafe
FloCafe is the free, local-first restaurant POS in the FloPOS ecosystem. Run orders, tables, kitchen display, and local data without a software subscription.
翻訳待ち
Search condominiums, house and lot, lots, pre-selling and foreclosed properties from Metro Manila to Palawan, with PRC and DHSUD-verified agents and prices shown in your currency.
翻訳待ち
コマースTypeScript · JavaScriptGitHub @gbromano-webオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A property marketplace for buying, renting, pre-selling and foreclosed homes across the Philippines, in the spirit of Lamudi, Dot Property and Property Finder. Built with Next.js, Tailwind CSS and PostgreSQL/PostGIS.
Homepage layout. This screenshot was taken offline, so the hero shows the illustrated fallback; with an internet connection it shows the photographs.
Homepage
Search (/search)
Property page (/property/[slug])
RealEstateListing data and social preview imagesAgent dashboard (/dashboard): leads by channel (Viber, WhatsApp, inquiry, sample computation), latest leads including overseas buyers, listings with quality score and promotion
Calculator (/calculator): standalone Pag-IBIG vs bank comparison
International buyers: prices in pesos with an estimate in 12 currencies (Bangko Sentral ng Pilipinas reference rates, dated), foreign-buyer badges and a sourced explainer of ownership rules
Lead routes: GET /api/ph/leads/viber and /whatsapp record the lead (ignoring crawlers and repeat taps) and open the chat (WhatsApp with a pre-filled message); POST /api/ph/leads accepts JSON only, validates every field, rate-limits by hashed IP, drops bot submissions and logs events without personal data. Inquiries are saved to the Lead table before the buyer sees "sent"; with no database a production server answers 503 rather than losing them. GET /api/health is the uptime check and pings the database.
Security and privacy: Content-Security-Policy, HSTS and other security headers on every page; the agent dashboard is locked with DASHBOARD_USER / DASHBOARD_PASSWORD; rate limits are shared across servers through Postgres; erase_user() and purge_old_leads() handle Data Privacy Act erasure requests and the 24-month retention period; a draft privacy notice is at /privacy (fill in the highlighted details and have it reviewed). Set LEAD_IP_SALT, DASHBOARD_USER, DASHBOARD_PASSWORD and NEXT_PUBLIC_SITE_URL in production
Data model (prisma/schema.prisma, 20 models), see docs/data-model.md: locations from Region to Barangay, properties in PHP and sqm for sale, rent, pre-selling and foreclosure, developers and projects with DHSUD License to Sell, RESA-licensed agents, hero banners, leads, saved searches and financing programs, with database CHECK rules and PostGIS triggers
| Search with map | Property page |
|---|---|
| Agent dashboard | Mobile |
pgdub1); client preview on GitHub PagesRequires Node.js 20 or later.
npm install
cp .env.example .env.local
npm run dev
Open http://localhost:3000. The homepage runs on sample data, so no database is needed to try it.
The production database is the Supabase project uyfiidwrmytdugzcjjzo (organization "Go Search Property"). It already has the full schema, the listing rules, the audit log, the privacy functions, the daily retention job and the reference data (82 locations, 21 amenities, 5 hero backgrounds). Browser keys have no access: every table has row-level security and no grants, and the website talks to Postgres only from its server.
To recreate it on a new project, run these in order (Supabase SQL editor or psql):
prisma/migrations/0_init/migration.sql # tables, enums, indexes (PostGIS in the extensions schema)
prisma/migrations/1_foreign_key_indexes/migration.sql
prisma/sql/supabase-security.sql # row-level security, revoke browser-key access
prisma/sql/postgis.sql # geo triggers, listing rules, audit log, erase_user(), purge_old_leads()
prisma/sql/retention-job.sql # daily retention job (pg_cron)
npm run seed:sql > seed.sql # reference data as SQL, then run seed.sql
Then mark the migrations as applied so Prisma Migrate takes over from here:
npx prisma migrate resolve --applied 0_init and npx prisma migrate resolve --applied 1_foreign_key_indexes.
This is the beginning of the README. Read the rest at the original. Read the full README ↗