Skip to content

Add plan sharing via server API (#182, Option A)#195

Merged
erikdarlingdata merged 1 commit into
devfrom
feature/182-plan-sharing-export
Apr 7, 2026
Merged

Add plan sharing via server API (#182, Option A)#195
erikdarlingdata merged 1 commit into
devfrom
feature/182-plan-sharing-export

Conversation

@erikdarlingdata
Copy link
Copy Markdown
Owner

Summary

  • Share button with two-phase consent dialog and user-configurable TTL (1 day to 1 year)
  • One-chance delete button (token held in memory only, lost on page navigation)
  • Server API (server/PlanShare/) deployed on Hetzner cpx11 (Ashburn, $6.99/mo)
  • SQLite storage with per-plan expiry and hourly cleanup
  • Shared plans load via ?share=<id> query parameter
  • Rate limited (10 shares/min/IP), 10MB payload max

Files

  • New: server/PlanShare/ — .NET 8 minimal API (SQLite, self-contained deploy)
  • Modified: Index.razor — Share button, consent modals, delete, shared plan loading
  • Modified: app.css — Modal, TTL picker, delete button styles
  • Modified: index.html — JS helpers (getBaseUrl, getQueryParam, copyToClipboard)

Test plan

  • Share a plan → consent phase 1 (TTL picker) → phase 2 (confirm) → link generated
  • Share URL loads plan in new tab
  • Delete button removes shared plan (verified 200→404)
  • TTL expiry: expired plans return 404, cleanup removes from DB
  • Rate limiting returns 429 after 10 rapid shares

🤖 Generated with Claude Code

Share button with two-phase consent dialog, user-configurable TTL
(1 day to 1 year), and one-chance delete button. Server API deployed
on Hetzner (cpx11, Ashburn) with SQLite storage and auto-expiry.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@erikdarlingdata erikdarlingdata merged commit c6734d5 into dev Apr 7, 2026
@erikdarlingdata erikdarlingdata deleted the feature/182-plan-sharing-export branch April 9, 2026 00:37
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