Skip to content

Feat/dodopayments monetization - #132

Merged
Rayan9064 merged 4 commits into
mainfrom
feat/dodopayments-monetization
Aug 7, 2026
Merged

Feat/dodopayments monetization#132
Rayan9064 merged 4 commits into
mainfrom
feat/dodopayments-monetization

Conversation

@Rayan9064

@Rayan9064 Rayan9064 commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • Added inbound email saving for registered senders, creating private, searchable resources.
    • Added API key management under a dedicated Settings page, including creation, copying, and revocation.
    • Added a share page for editing and saving shared content.
    • Added resource status filtering and aggregate vault statistics.
    • Added installable web app support and share-target handling.
    • Added safe post-login redirects and a dark theme configuration.
  • Improvements

    • Added skipped, pending, and failed indexing visibility.
    • Added responsive Settings navigation across mobile and desktop layouts.

…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.
@vercel

vercel Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dumpit Ready Ready Preview Aug 7, 2026 2:45am

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 90640aee-a825-4b21-9590-42d8246f454d

📥 Commits

Reviewing files that changed from the base of the PR and between 08c0426 and 77bdff5.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (13)
  • CLAUDE.md
  • app/api/resources/route.ts
  • app/api/webhooks/resend-inbound/route.ts
  • app/components/Dashboard.tsx
  • app/components/Layout.tsx
  • app/components/Profile.tsx
  • app/components/Settings.tsx
  • app/dashboard/page.tsx
  • app/layout.tsx
  • app/login/page.tsx
  • app/share/page.tsx
  • package.json
  • public/manifest.json

📝 Walkthrough

Walkthrough

Changes

The 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

Layer / File(s) Summary
Inbound email resource creation
app/api/webhooks/resend-inbound/route.ts, package.json, CLAUDE.md
The Resend webhook verifies signatures, retrieves inbound email, matches registered senders, creates private resources, and indexes accepted messages.
Resource statistics and status filtering
app/api/resources/route.ts, app/components/Dashboard.tsx
The first resource page includes aggregate counts. The dashboard displays these counts and filters resources by indexing status.
API-key settings flow
app/components/Profile.tsx, app/components/Settings.tsx, app/components/Layout.tsx, app/dashboard/page.tsx, CLAUDE.md
API-key management moves to Settings, with generation, one-time display, copying, revocation, and a five-key limit.
Share target and authenticated entry flows
app/share/page.tsx, app/login/page.tsx, public/manifest.json
The share page saves shared content as a private resource. Login preserves safe next paths. The manifest defines the share target.
Application metadata
app/layout.tsx, public/manifest.json, CLAUDE.md
The application declares its manifest and dark theme color. Documentation reflects current repository structure and feature status.

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
Loading
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
Loading

Possibly related PRs

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/dodopayments-monetization

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

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

app/api/resources/route.ts

ESLint 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.ts

ESLint skipped: the ESLint configuration for this file references a package that is not available in the sandbox.

app/components/Dashboard.tsx

ESLint skipped: the ESLint configuration for this file references a package that is not available in the sandbox.

  • 8 others

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Rayan9064
Rayan9064 merged commit 6020ead into main Aug 7, 2026
3 of 5 checks passed
@Rayan9064
Rayan9064 deleted the feat/dodopayments-monetization branch August 7, 2026 02:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant