Rent-Ruby is a full-stack React/Vite and Express app for the Ruby Street tenant
portal and property management dashboard. It is not a static-only SPA: the UI
calls same-origin /api/* routes served by server.ts.
Prerequisites: Node.js 22+
- Install dependencies:
npm install
- Copy
.env.exampleto.env.localand setGEMINI_API_KEY. - Start the development server:
npm run dev
Build the frontend and start the Express server:
npm run build
npm startThe production server serves dist/ and the API from the same Node process.
Use these environment variables in production:
GEMINI_API_KEY- required for Gemini-powered features.PORT- injected automatically by hosts such as Cloud Run.APP_URL- public app URL, for examplehttps://rent-ruby.com.DATABASE_PATH- optional SQLite path. For durable production data, point this at a mounted volume or migrate the data layer to a managed database.
This repo includes a Dockerfile compatible with Cloud Run.
Set the canonical domain first. Current DNS checks show rent-ruby.com exists,
while rent-rubyl.com does not resolve and must be registered/configured
before it can be mapped.
export CANONICAL_DOMAIN=rent-ruby.com
gcloud run deploy rent-ruby \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars APP_URL=https://${CANONICAL_DOMAIN},DATABASE_PATH=/data/rentroll_v3.db \
--set-secrets GEMINI_API_KEY=GEMINI_API_KEY:latestAfter the service is healthy, map the custom domain in Cloud Run:
gcloud run domain-mappings create \
--service rent-ruby \
--domain ${CANONICAL_DOMAIN} \
--region us-central1Then add the DNS records returned by Google Cloud for the domain.
- Static hosts such as basic Firebase Hosting, Netlify static deploys, or Cloudflare Pages without a Node backend will not serve the API routes.
- The bundled SQLite database is suitable for demos and single-container launches. Production data should use a mounted volume or managed database.
- View the original AI Studio applet at https://ai.studio/apps/85f4144f-dabc-4ffc-b990-b6a65dc46dad.
For a meeting-safe visual demo, the app can be deployed as a static Firebase Hosting showcase. This mode avoids API-heavy tabs and shows a polished homepage, Tenant Portal snapshot, and high-level Rent Roll/Owner Intelligence snapshot.
npx -y firebase-tools@latest --version
npx -y firebase-tools@latest login
npx -y firebase-tools@latest use gen-lang-client-0013150741
npx -y firebase-tools@latest deploy --only hostingThe Firebase deploy runs npm run build:showcase automatically and serves the
Vite dist/ output from:
https://gen-lang-client-0013150741.web.apphttps://gen-lang-client-0013150741.firebaseapp.com
For a temporary preview URL instead of replacing the live Hosting release:
npx -y firebase-tools@latest hosting:channel:deploy owner-showcase --expires 7d