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>
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>
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>
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>
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>
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>
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>
Uint8Array.buffer returns ArrayBufferLike which is incompatible with
PublicKeyCredentialCreationOptions/RequestOptions in strict mode.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
- 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>
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>
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>
- 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>
- 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>
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>
Adds a succinct "rVote in 30 Seconds" section after the hero that explains:
- Quadratic voting (exponential credit cost)
- Reddit-style ranking (upvote/downvote)
- Time-delayed vote decay (30-60 days)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Set all 3 proposals to similar starting scores (43, 44, 45)
- All proposals start in ranking stage (no pre-promoted)
- Sort proposals by score so rankings visually reorder
- Add rank numbers (#1, #2, #3) to each proposal card
- Hide voting stage section until a proposal is promoted
- Users can now easily see their votes change the order
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace dialog-based vote weight selector with inline incrementing
- Click up/down arrows to add votes, cost updates in real-time
- Score badge shows preview (current → new) while pending
- Small confirm/cancel buttons appear below pending votes
- Same UX for both VoteButtons component and demo page
- More intuitive and immediate feedback
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update title from "Quadratic Voting" to "Quadratic Proposal Ranking"
- Update description to emphasize backlog prioritization
- Update keywords for better SEO
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change "Quadratic Voting" to "Quadratic Proposal Ranking"
- Keep terminology consistent across the site
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update terminology from "Quadratic Ranking" to "Quadratic Proposal Ranking"
- More descriptive naming that emphasizes proposal prioritization
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename "Quadratic Voting" to "Quadratic Ranking" throughout
- Update headline to "Democratic Backlog Prioritization"
- Add rSpace ecosystem branding and color scheme
- Apply cyan/teal primary colors using oklch format
- Add gradient backgrounds and decorative elements
- Focus messaging on backlog prioritization vs voting mechanism
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add traefik.docker.network=traefik-public label
- Remove TLS requirement (handled by Cloudflare)
- Use only web entrypoint
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Initialize backlog.md for task tracking
- Add task-1: Deploy rVote.online with demo and explainer pages
- Document completed work and pending deployment steps
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Complete implementation of a Reddit-style proposal ranking system with:
- Quadratic voting with credit decay (10 credits/day, 30-60 day decay)
- Two-stage voting: Ranking (quadratic) → Pass/Fail (time-boxed)
- Auto-promotion at score ≥100 to 7-day voting period
- NextAuth.js authentication with email/password
- PostgreSQL database with Prisma ORM
- shadcn/ui components with Tailwind CSS
- Docker configuration for deployment
Features:
- User registration/login with credit system
- Proposal creation, editing, deletion
- Upvote/downvote with quadratic cost (weight² credits)
- Vote decay returning credits over time
- Pass/fail voting with Yes/No/Abstain
- User profile with voting history and credit tracking
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>