Deploy on DigitalOcean App Platform (GitHub-source build) + consolidate audit-fixes
Deploy config: - .do/app.yaml: build the Dockerfile directly from GitHub (deploy_on_push) instead of a pre-built DOCR image; NEXT_PUBLIC_* set RUN_AND_BUILD_TIME with the propertymanagement.network domain so they bake into the client bundle; add custom domains block (apex + www); wire Sentry DSN (server + browser). Included pending work from the audit-fixes branch: - AI provider abstraction (OpenAI/Anthropic, admin-selectable; Anthropic default) - Per-landlord e-signature (DocuSign OAuth + Dropbox Sign) + migration 0010 - Outbound webhooks / Zapier integration - PayPal removal (Stripe-only billing) - Storage hardening (fail-loud when Spaces unconfigured), security fixes Verified: full production Docker build (same build-args as DO) passes clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
917a06ee85
commit
5495b94924
@@ -32,7 +32,7 @@ Everything is **multi-tenant and team-aware**: each landlord operates on their o
|
||||
**Core operations**
|
||||
- 🏢 **Properties & units** — manage your whole portfolio with live occupancy tracking and a map view (addresses are auto-geocoded).
|
||||
- 👥 **Tenants** — profiles, lease history, payment records, and a private **tenant portal** (token-based, no login required).
|
||||
- 💵 **Rent tracking** — log payments, send **Stripe or PayPal** payment links, and auto-mark balances overdue with automatic late fees.
|
||||
- 💵 **Rent tracking** — log payments, send **Stripe** payment links, and auto-mark balances overdue with automatic late fees.
|
||||
- 🔧 **Maintenance** — full status workflow (Open → In Progress → Resolved), with tenant-submitted requests from the portal.
|
||||
- 📄 **Leases** — expiry countdowns, automated 60/30/7-day email alerts, and **e-signature** (DocuSign / Dropbox Sign).
|
||||
- 🧾 **Expenses** — categorized logging with recurring-expense support.
|
||||
@@ -55,7 +55,7 @@ Everything is **multi-tenant and team-aware**: each landlord operates on their o
|
||||
|---|---|
|
||||
| 🌐 **Public REST API** | Versioned `/api/v1` endpoints (properties, tenants, payments, maintenance, webhooks) authenticated with Bearer **API keys**. See `/api-docs`. |
|
||||
| 🪝 **Outbound webhooks / Zapier** | Subscribe to events (`tenant.created`, `payment.paid`, `maintenance.updated`, …). Deliveries are **HMAC-signed**, retried with backoff, and Zapier-compatible via the REST-hook subscribe/unsubscribe pattern. |
|
||||
| 💳 **Payments** | Stripe (subscriptions + rent payment links) and PayPal. |
|
||||
| 💳 **Payments** | Stripe (subscriptions + rent payment links). |
|
||||
| 📚 **Accounting sync** | One-way push of income & expenses to **QuickBooks Online** or **Xero** (OAuth). |
|
||||
| ✍️ **E-signature** | Send leases for signature via **DocuSign** or **Dropbox Sign**. |
|
||||
| 🔑 **Auth** | Email/password and Google OAuth (Better Auth). |
|
||||
@@ -73,7 +73,7 @@ Every integration is env-gated: unconfigured providers show a clean “not confi
|
||||
| 🏆 **Landlord** | $59/mo | Unlimited properties, team access, white-label, AI (200/mo) |
|
||||
| ♾️ **Lifetime** | $199 once | Everything in Landlord, forever |
|
||||
|
||||
Billing runs through **Stripe** or **PayPal**. Stripe products/prices are resolved by stable lookup keys and auto-created on first checkout, so going live is just an API-key swap — no price IDs to wire up.
|
||||
Billing runs through **Stripe**. Products/prices are resolved by stable lookup keys and auto-created on first checkout, so going live is just an API-key swap — no price IDs to wire up.
|
||||
|
||||
---
|
||||
|
||||
@@ -86,7 +86,7 @@ Billing runs through **Stripe** or **PayPal**. Stripe products/prices are resolv
|
||||
| Database | PostgreSQL via **Drizzle ORM** |
|
||||
| Auth | Better Auth (email/password + Google OAuth) |
|
||||
| Object storage | DigitalOcean Spaces (S3-compatible, CDN, auth-gated) |
|
||||
| Payments | Stripe + PayPal |
|
||||
| Payments | Stripe |
|
||||
| AI | OpenAI (`gpt-4o-mini`) |
|
||||
| Email | SMTP (SMTP2GO) |
|
||||
| Maps | Leaflet + OpenStreetMap / Nominatim geocoding |
|
||||
@@ -113,7 +113,7 @@ Copy the template and fill in your own values:
|
||||
cp .env.example .env.local
|
||||
```
|
||||
|
||||
`.env.local` holds your database URL, auth secret, and credentials for Stripe/PayPal, OpenAI, SMTP, and object storage. **Every variable is documented inline in `.env.example`**, and the full production reference lives in **[DIGITALOCEAN.md](DIGITALOCEAN.md)**. Never commit real secrets.
|
||||
`.env.local` holds your database URL, auth secret, and credentials for Stripe, OpenAI, SMTP, and object storage. **Every variable is documented inline in `.env.example`**, and the full production reference lives in **[DIGITALOCEAN.md](DIGITALOCEAN.md)**. Never commit real secrets.
|
||||
|
||||
### 3. 🗄️ Run migrations
|
||||
|
||||
@@ -129,7 +129,7 @@ npm run db:push # push schema directly (quick local prototyping)
|
||||
|
||||
- **Stripe** — set the API keys, then add a webhook at `https://yourdomain.com/api/stripe/webhook` for `checkout.session.completed`, the `customer.subscription.*` events, `invoice.payment_failed`, and `payment_intent.succeeded`.
|
||||
- **Email** — verify a sending domain with your SMTP provider (e.g. SMTP2GO) and set the `SMTP_*` + `EMAIL_FROM` vars.
|
||||
- **Google / PayPal / OpenAI / accounting / e-sign** — each is optional and activates once its env vars are present.
|
||||
- **Google / OpenAI / accounting / e-sign** — each is optional and activates once its env vars are present.
|
||||
|
||||
### 5. ▶️ Run locally
|
||||
|
||||
@@ -158,7 +158,7 @@ app/
|
||||
├── api/
|
||||
│ ├── v1/ # 🌐 Public REST API (Bearer API keys)
|
||||
│ ├── webhooks + cron/ # 🪝 Outbound webhook delivery + scheduled jobs
|
||||
│ ├── stripe/ paypal/ # 💳 Billing + payment links + provider webhooks
|
||||
│ ├── stripe/ # 💳 Billing + payment links + provider webhooks
|
||||
│ ├── integrations/ # 📚 QuickBooks / Xero OAuth
|
||||
│ ├── esign/ # ✍️ DocuSign / Dropbox Sign
|
||||
│ └── … # Properties, tenants, rent, maintenance, documents, AI
|
||||
@@ -169,7 +169,7 @@ lib/
|
||||
├── auth.ts account.ts # Better Auth + team/account scoping
|
||||
├── storage.ts # Object storage (Spaces) with local-disk dev fallback
|
||||
├── webhooks/ # Event catalog, HMAC signing, SSRF guard, delivery
|
||||
├── stripe/ paypal/ # Billing clients & plans
|
||||
├── stripe/ # Billing clients & plans
|
||||
├── accounting/ esign/ # QuickBooks/Xero & DocuSign/Dropbox Sign
|
||||
├── ai/ # OpenAI client + prompts
|
||||
├── email/ # SMTP (SMTP2GO) client + HTML templates
|
||||
|
||||
Reference in New Issue
Block a user