Commit Graph

65 Commits

Author SHA1 Message Date
Jeff Emmett 62258f60d6 fix: add Traefik priority 130 to override rspace-online routing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 14:30:24 -08:00
Jeff Emmett 499974c361 feat: standardize header, categories, cross-app spaces
- AppSwitcher: rTube/rSwag → Creating, rSocials → Sharing, rData → Observing
- EcosystemFooter: updated link order to match new categories
- UserMenu: 🔑 Sign In button, 🔐 lock when logged in
- SpaceSwitcher: reads EncryptID token, sends Bearer header
- /api/spaces proxy: forwards to rspace.online (canonical spaces)
- /api/me: verifies EncryptID token for auth status
- Header.tsx: standardized bg-slate-900/85 across all apps

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 14:16:59 -08:00
Jeff Emmett 98a0adb570 feat: add space subdomain routing and ownership support
- Traefik wildcard HostRegexp for <space>.r*.online subdomains
- Middleware subdomain extraction and path rewriting
- Provision endpoint with owner_did acknowledgement
- Registry enforces space ownership via EncryptID JWT

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:20:25 -08:00
Jeff Emmett a49cc72182 Standardize emojis across header, favicons, and ecosystem links
Canonical emoji set for consistency:
- 🕸️ rNetwork (was 🌐), ⚖️ rChoices (was 🔀), 📋 rWork (was 💼)
- 🔐 rIdentity (was 🔑), 📖 rPubs (was 📰), 💸 rFunds (was 💰)
- 💰 rWallet (was 💼 in footer), 📬 rInbox (was ✉️)
- 💭 rForum (was 💬, differentiates from rChats)
- 📢 rSocials (was 📱), 🔨 rAuctions (was 🏛️ in footer)
- 🎬 rTube (was 📹 in footer)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 12:56:52 -08:00
Jeff Emmett 27d96cc127 fix: add required decaysAt field to Vote seed data
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:07:07 -08:00
Jeff Emmett d6544cb394 Add internal seed endpoint for demo data
Creates 3 proposals (ranking/voting/passed) with votes and final
votes from 3 demo users showing governance lifecycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:02:31 -08:00
Jeff Emmett 1c6f9c64df fix: remove unmigrated fields from provision endpoint
Skip visibility/isPublic and ownerDid - the Prisma schema has columns
that don't exist in the production DB yet. Let DB defaults handle it.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:49:56 -08:00
Jeff Emmett 69599db091 fix: use isPublic instead of visibility in provision endpoint
The DB schema has isPublic (boolean) not visibility (string).
The Prisma schema was updated but never migrated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:48:19 -08:00
Jeff Emmett 7fffb9435b Add internal provision endpoint for rSpace Registry
Auth-free POST /api/internal/provision creates Space + system User + ADMIN
membership with starting credits when called by the registry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:30:07 -08:00
Jeff Emmett d6ac388afe fix: landing page improvements and SpaceSwitcher domain support
- SpaceSwitcher auto-derives domain from window.location
- Fix landing page issues (redirect bug, duplicate footers,
  broken links, missing content)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:32:47 -08:00
Jeff Emmett 8f41e7dbf0 fix: space links use subdomain URLs instead of rspace.online path
Space links now go to <space>.<app-domain> (e.g., myspace.rfunds.online)
instead of rspace.online/<space>. Domain derived from window.location
when not explicitly provided.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:18:54 -08:00
Jeff Emmett a1aec145e7 fix: nest Sign Out under username dropdown in UserMenu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:09:14 -08:00
Jeff Emmett bdd08b31b1 feat: standardize header with AppSwitcher, SpaceSwitcher, and UserMenu
- Replace inline nav/Navbar with shared Header component
- Header pattern: AppSwitcher dropdown / SpaceSwitcher / actions / Sign In
- SpaceSwitcher and UserMenu work without SDK dependency
- Consistent across all r*Apps

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:03:08 -08:00
Jeff Emmett c50327d400 feat: standardize AppSwitcher and EcosystemFooter across all rApps
- Update AppSwitcher with all 26 r*Apps in 8 categories
- Add EcosystemFooter component with consistent ecosystem links
- Categories: Creating, Planning, Communicating, Deciding,
  Funding & Commerce, Social & Media, Work & Productivity,
  Identity & Infrastructure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:48:00 -08:00
Jeff Emmett 766f72dd83 refactor: migrate EncryptID URLs from encryptid.jeffemmett.com to auth.ridentity.online
Part of the ridentity.online branding migration. The EncryptID auth
server is now accessible at auth.ridentity.online (with the legacy
encryptid.jeffemmett.com kept as a backward-compatible alias).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:20:06 -08:00
Jeff Emmett 1130328549 fix: dark background + emoji favicon for rStack design consistency
Standardize to dark background (#0f172a / slate-900) and add emoji
data URI favicon matching the rStack ecosystem.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 20:19:04 -08:00
Jeff Emmett 7a62b9fd58 feat: add rStack AppSwitcher dropdown to header
Adds the unified rStack app switcher with pastel badges, emoji icons,
and categorized navigation across all 17 rStack apps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 19:15:54 -08:00
Jeff Emmett c8bbda5931 Add .dockerignore for optimized Docker builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:59:53 -07:00
Jeff Emmett 3ec36b52d5 chore: migrate SMTP from mx.jeffemmett.com to mail.rmail.online
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 20:15:24 +00:00
Jeff Emmett 5d516fb770 Add rData analytics tracking and ecosystem footer link
- Inject rdata.online/collect.js tracking script in layout
- Add rData link to ecosystem footer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 18:57:08 +00:00
Jeff Emmett a9866f4a32 feat: migrate from NextAuth to pure EncryptID auth
Replace the NextAuth Credentials provider wrapper with direct EncryptID
SDK integration. The auth() function now reads the encryptid_token cookie
directly, keeping the same interface so all API routes and server
components work unchanged.

- Replace SessionProvider with EncryptIDProvider
- Add /api/auth/session endpoint for cookie management
- Update signin/signup pages to use SDK login/register + cookie sync
- Update Navbar to use useEncryptID() hook
- Remove next-auth, @auth/prisma-adapter, bcryptjs dependencies
- Drop Account, Session, VerificationToken Prisma models + DB tables
- Remove legacy email/password register route

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 11:04:55 +00:00
Jeff Emmett 8ed22c9caa feat: standardize nav header and add ecosystem footer
Rename "Spaces" to "Create Space", add full 16-app ecosystem footer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 09:43:23 +00:00
Jeff Emmett 6a8fb6b6ec fix: use ownerDid instead of creatorId for Space owner check
The Prisma Space model uses ownerDid (DID string) not creatorId.
Also hoists user lookup to avoid duplicate query.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:20:07 -07:00
Jeff Emmett ca9d54b01b chore: backlog TASK-6 SpaceRole bridge (Done)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:35:06 -07:00
Jeff Emmett b3a860766e feat: add SpaceRole bridge for cross-module membership sync
Resolves user's effective SpaceRole by checking local rVote membership
first, then falling back to EncryptID server for cross-space membership.
Includes 5-minute in-memory cache and hasCapability helper.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:32:11 -07:00
Jeff Emmett b98f09305b docs: add MODULE_SPEC.md with permission model and capabilities
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 12:30:14 -07:00
Jeff Emmett 2a14925b54 chore: add rInbox to r* Ecosystem footer
Add rinbox.online link to the ecosystem footer navigation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:31:22 -07:00
Jeff Emmett 5cfbe70791 Replace Resend env vars with SMTP config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 16:13:19 -07:00
Jeff Emmett b977c26e01 chore: remove unused resend dependency
Email/password auth removed in favor of EncryptID passkeys.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:49:04 -07:00
Jeff Emmett 160a556a48 feat: rewrite demo with live rSpace data via useDemoSync
Replace local state InteractiveDemo with real-time WebSocket connection
to the shared demo community. Votes sync across the r* ecosystem in
real-time. Updated home page section header to match.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:39:11 -07:00
Jeff Emmett 8276dacc24 feat: unify auth with EncryptID SDK, remove email/password
Replace inline WebAuthn ceremony with SDK EncryptIDClient.
Remove email/password credentials provider from NextAuth config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:36:01 -07:00
Jeff Emmett 23971b2f0f feat: add r* ecosystem footer to layout
Add ecosystem footer with all 10 r* app links to the root layout,
visible on every page including the interactive demo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:58:42 -07:00
Jeff Emmett 7172306028 Remove Vercel deploy section from README, add backlog tasks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:40:38 -07:00
Jeff Emmett 11060b0a33 Add did property to next-auth Session type
The spaces route accesses session.user.did for space ownership.
Adding the optional property to the type augmentation fixes the
TypeScript compilation error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:39:54 -07:00
Jeff Emmett 093062ccc2 Add ambient type declarations for @encryptid/sdk subpath imports
The SDK's dist/ directory may not include .d.ts files in all build
environments (server builds without TypeScript). These ambient
declarations prevent "Could not find a declaration file" errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:38:24 -07:00
Jeff Emmett 4764686bd0 Fix seed script: use visibility field instead of removed isPublic
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:32:29 -07:00
Jeff Emmett 6666cd1182 Fix Docker build: copy SDK into node_modules directly for Turbopack compat
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:31:07 -07:00
Jeff Emmett 0e05f3a5ab Fix Docker build: disable Turbopack for file: linked SDK compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:27:38 -07:00
Jeff Emmett 9d3c8ee5dc Fix Docker build: use parent context for encryptid-sdk
The @encryptid/sdk dependency uses file:../encryptid-sdk which
requires the build context to include the sibling SDK directory.
Also regenerated lock file to include the SDK.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:23:08 -07:00
Jeff Emmett a47db17039 Add emoji favicon (🗳️) for browser tab
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:13:39 -07:00
Jeff Emmett 3cd6ccee6d feat: migrate to configurable space visibility with SDK auth
Replace isPublic boolean with visibility string field (public/public_read/
authenticated/members_only). Use encryptid-sdk for token verification.
Enforce space access in API routes via checkSpaceAccess.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:54:12 -07:00
Jeff Emmett 4c7cc616fe feat: add Prisma migration for EncryptID did column on User
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 07:45:33 -07:00
Jeff Emmett 36584014ae fix: ArrayBuffer type casts for WebAuthn ceremony in TS 5.x
Uint8Array.buffer returns ArrayBufferLike which is incompatible with
PublicKeyCredentialCreationOptions/RequestOptions in strict mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 07:43:05 -07:00
Jeff Emmett f48a98d520 feat: add EncryptID passkey authentication
Add passkey-based sign-in alongside existing email/password auth:
- Add encryptid credentials provider to NextAuth config
- Add DID field to User model (Prisma schema)
- Add passkey sign-in button to signin page (WebAuthn ceremony)
- Add passkey registration to signup page
- Server-side token verification via EncryptID server
- Auto-creates user from DID on first passkey login

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 07:34:21 -07:00
Jeff Emmett 90865039f5 Polish invite flow and improve mobile responsiveness
- Add Sheet UI component for mobile navigation drawer
- SpaceNav: hamburger menu on mobile, horizontal tabs on desktop
- Join page: specific error messages (expired/maxed/invalid), inline success
  state with credits info, already-member handling, skeleton loading
- InviteDialog: add expiry hours input, helper text for email field
- InviteList: new component for admin invite management (revoke, copy link)
- Mobile responsiveness sweep across all space pages, proposals, voting
  buttons, member list, settings, demo page, and final vote panel

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 22:49:54 -07:00
Jeff Emmett 9456c6f73f Hide main navbar on space pages, clean up nav links
Space pages use SpaceNav for navigation — the root Navbar with
Sign In/Sign Up buttons was redundant and confusing there.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 21:29:57 -07:00
Jeff Emmett e22063c092 Add multi-tenant Spaces with subdomain routing
Introduces independent community Spaces where admins can manage members,
allot credits, and run proposals. Each Space gets its own subdomain
(e.g. cryptocommons.rvote.online). Home page and demo are now fully
public with no auth required.

- Schema: Space, SpaceMember, SpaceInvite models with per-space credits
- Middleware: subdomain detection + URL rewriting to /s/[slug]/*
- APIs: Space CRUD, member management, invite system, space-scoped voting
- UI: Space dashboard, proposals, members, settings, join pages
- Extracted InteractiveDemo component for home/demo pages
- Global /proposals routes redirect to /spaces

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 22:10:19 +00:00
Jeff Emmett 333230cea9 Update ProposalCard and VoteButtons with Reddit-style orange/blue colors
- VoteButtons: Orange upvotes, blue downvotes matching demo page
- VoteButtons: Larger arrows (h-7 w-7), proper hover/active states
- ProposalCard: Use plain div instead of Card to avoid flex conflicts
- ProposalCard: Vote column on left (80px) with border separator
- ProposalCard: Progress bar color matches vote state
- Both: Ring highlight when user has voted

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 23:05:26 +00:00
Jeff Emmett bc56e5bdb6 Fix demo page voting - use Button components and proper flex layout
- Replace raw <button> elements with Button components for proper hydration
- Use plain div instead of Card for proposal items to avoid flex-col conflicts
- Simplify vote handlers into handleUpvote/handleDownvote functions
- Reddit-style layout: vote column (72px) on left with border separator
- Orange upvotes, blue downvotes with proper hover/active states

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 22:34:54 +00:00
Jeff Emmett eebd6a4349 Redesign demo page with Reddit-style voting UX and improve ELI5 section
Demo page changes:
- Reddit-style vote arrows on left (orange upvote, blue downvote)
- More realistic governance proposals (treasury, moderation, research, security, town halls)
- Prominent color-coded vote states and confirmation flow
- Cleaner card layout with progress bars

Homepage ELI5 section:
- Three distinct colored cards (orange/blue/purple) for each mechanism
- Icon badges for visual hierarchy
- Clearer explanations with emphasized takeaways

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 19:11:11 +00:00