Feat/dodopayments monetization - #132
Conversation
…ile sidebar box Founder flagged from real dashboard screenshots that API key management was cramped into a Profile sidebar card. Lift it into a new Settings.tsx component with its own nav item (desktop sidebar + mobile bottom bar, now 6 items), leaving Profile.tsx for identity/public-presence concerns.
…the loaded page
Header stats ("X Indexed" etc.) were computed client-side from only the
currently-loaded 20-resource page, wrong at scale. Add a vault-wide
stats aggregate (Firestore count() queries) to GET /api/resources,
computed once on the first page load. Also fix the 'skipped' index
status having no chip style (was invisible), and add a status filter
dropdown alongside the existing tag filter.
GET-based Web Share Target (no service worker needed since we're only sharing links/text, not files): public/manifest.json declares the share_target pointing at a new auth-gated /share page, which parses title/text/url from the share intent (falling back to extracting a URL out of the text param, since many apps only populate that) and shows a pre-filled confirm-and-save screen. Login page now supports a ?next= redirect so /share round-trips through auth correctly. iOS Safari has no Web Share Target API support (Apple has never implemented it) — this only works for Android users who've installed the PWA. Accepted trade-off per founder decision.
Resend added inbound email receiving (Nov 2025) — this wires it up. New app/api/webhooks/resend-inbound/route.ts verifies the Svix signature scheme Resend uses, fetches the full email body via resend.emails.receiving.get() (the webhook payload is metadata-only), matches the sender's address against the registered account email (zero extra friction, matches the "just forward it" landing copy — accepted trade-off: From-header spoofing could inject a junk note into someone's private vault, no read/exfiltration risk), and creates + indexes a resource exactly like the other capture paths. Note: CLAUDE.md previously claimed "Weekly email digest (Resend) — Live" — that was false, no Resend integration existed anywhere in the repo before this commit. Corrected in CLAUDE.md alongside this. Not yet reachable in production: requires the founder to configure an inbound domain/MX records for dumpit.page in DNS + the Resend dashboard, create the webhook there, and set RESEND_API_KEY / RESEND_INBOUND_WEBHOOK_SECRET. Code path verified in isolation (invalid JSON, ignored event types, missing email_id, unconfigured-key soft-fail) — the Resend-account-dependent path can't be tested without those manual steps.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (13)
📝 WalkthroughWalkthroughChangesThe PR adds signed Resend inbound email processing, first-page resource statistics, dashboard status filtering, dedicated API-key settings, a share-target page, safe login redirects, and PWA metadata. Documentation and feature status entries are also updated. Core product flows
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Resend
participant InboundWebhook
participant Firestore
participant ResourceIndexer
Resend->>InboundWebhook: Send signed inbound event
InboundWebhook->>Resend: Fetch complete email
InboundWebhook->>Firestore: Match sender and save private resource
InboundWebhook->>ResourceIndexer: Index resource
sequenceDiagram
participant Browser
participant SharePage
participant ResourcesAPI
participant Firestore
Browser->>SharePage: Open share URL
SharePage->>SharePage: Parse and edit shared content
SharePage->>ResourcesAPI: Save private resource
ResourcesAPI->>Firestore: Store resource
ResourcesAPI-->>SharePage: Return result
SharePage-->>Browser: Show success or error
Possibly related PRs
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
app/api/resources/route.tsESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox. app/api/webhooks/resend-inbound/route.tsESLint skipped: the ESLint configuration for this file references a package that is not available in the sandbox. app/components/Dashboard.tsxESLint skipped: the ESLint configuration for this file references a package that is not available in the sandbox.
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary by CodeRabbit
New Features
Improvements