PepCycle
All-in-one peptide research companion — calculators, library, protocol tracking, inventory & shared vials
A bilingual web and native mobile app for peptide research. Combines a free toolkit of calculators and a curated peptide library with paid power-user features like unlimited protocols, auto-deducting inventory, shared vials, advanced half-life tracking and data export. Ships as a PWA and as native iOS/Android apps via Capacitor, monetized with Stripe on web and RevenueCat on mobile.
Overview
PepCycle is a peptide research companion built as a single TypeScript codebase that ships to the web as a PWA and to iOS and Android as native apps via Capacitor.
The free tier covers the core toolkit: reconstitution, unit-conversion, half-life and nasal-spray calculators, a curated peptide library with verified studies, and limited protocol and inventory tracking.
The Pro tier unlocks unlimited protocols and inventory, auto-deduction of consumed peptide from stock, shared vials between two users, advanced half-life visualization, PDF export and a one-click GDPR data export.
Monetization is handled by Stripe Checkout and Customer Portal on the web and by native in-app purchases through RevenueCat on mobile, with promo codes, expiration warnings and an in-app support inbox on top.
Architecture
React + Capacitor clients → Backend (Auth · Postgres + RLS · Storage) → Edge Functions → Stripe & RevenueCat
Tech stack
MVP features
Computes water volume, dose in IU and a syringe-scale visualization from vial size and target dose.
Bidirectional conversion between mg, mcg, ml and IU for fast in-context calculations.
Visualizes peptide concentration over time, with an advanced view available to Pro users.
Helps plan nasal-spray dosing with per-puff math and total-dose projection.
30+ curated peptide profiles with dosing, side effects, interactions and verified studies linked to PubMed.
Scheduling, injection-site rotation, dose splitting and titration. Free tier supports up to 5 active protocols; Pro is unlimited.
Tracks products with expiration dates and low-stock alerts. Free tier supports up to 5 products; Pro is unlimited and adds auto-deduction on logged doses.
Two users can sync a single vial via invitation, with consumption split securely on the server so neither side can over-draw.
In-app reconstitution and buying guides, including partner content, edited through a dedicated guide editor.
Full DE/EN translations with persisted language preference, plus light/dark mode and selectable color themes.
Installable PWA with skip-waiting service worker and update banner, plus native iOS and Android builds via Capacitor.
Stripe Checkout and Customer Portal on web with a graceful cancel flow, and RevenueCat-driven in-app purchases on iOS and Android.
Redeemable promo codes with 7-day and 1-day expiration warnings surfaced in-app.
In-app ticketing with row-level security, plus an admin inbox to triage and respond.
Role-based admin console with proactive messaging, user growth stats and partner click tracking.
Client-side peptide PDF export and a one-click GDPR JSON export covering 12+ tables.
Workflows
Onboarding & first dose
- 1
User signs up via email/password or OAuth and lands in a short onboarding tour.
- 2
They pick a peptide from the library and run the reconstitution calculator to determine water volume and dose.
- 3
They create a protocol with schedule, injection-site rotation and optional titration.
- 4
They add the product to inventory with an expiration date; future logged doses can auto-deduct from stock on Pro.
Shared vial
- 1
A Pro user creates a vial and invites a second user by email.
- 2
The invitee accepts the invitation and the vial appears in both accounts.
- 3
Each logged dose is sent through a server-side split that updates the shared remaining volume atomically.
- 4
Both users see real-time updates and low-stock alerts on the same vial.
Upgrade to Pro
- 1
On web, the user goes through Stripe Checkout; on mobile, they purchase via the native App Store / Play Store flow handled by RevenueCat.
- 2
A server-side webhook validates the event and updates the user's entitlement.
- 3
Pro features (unlimited protocols/inventory, auto-deduction, shared vials, advanced half-life, exports) unlock immediately in the UI.
- 4
Cancellation is handled through the Stripe Customer Portal or the native store, with an in-app 'expires on' indicator until the period ends.
Support & admin
- 1
User opens a support ticket from inside the app; the ticket is scoped to them via row-level security.
- 2
An admin sees the ticket in the admin inbox and can reply, with the conversation surfaced back to the user via the in-app notification bell.
- 3
Admins can send proactive broadcast messages, monitor user growth and track partner referral clicks from the admin console.
Security
- Roles stored in a dedicated table and checked through a security-definer helper, so client code cannot escalate privileges.
- Row Level Security enforced on every user-owned table — entitlements, inventory, protocols, shared vials and support tickets.
- OAuth flows use PKCE; passwords enforce a strong policy.
- Shared-vial consumption goes through a server-side routine so neither participant can over-draw or tamper with the remaining volume.
- Stripe and RevenueCat webhooks validated server-side before entitlements are updated.
- User-generated markdown is sanitized before rendering.
- Private storage buckets, accessed through short-lived signed URLs.
- Account deletion cascades through related data so no orphaned personal records remain.