A full-featured password manager and secrets management platform built with Rails 8 API backend and React frontend with Tailwind CSS v4 and shadcn/ui.
- 🔐 Secure password storage with encryption
- 👥 Multi-user and organization support
- 🏷️ Categories and tags for organization
- ⭐ Favorites and quick access
- 🔍 Advanced search and filtering
- 📊 Security audit dashboard
- 📈 Password strength analysis
⚠️ Breach detection- 🔄 Duplicate detection
- 📤 Import/Export (JSON & CSV)
- 🔗 Password sharing between users
- 📦 Bulk operations
- ⚙️ User settings and preferences
- 🌍 Multi-environment support (dev, staging, production, test)
- 🔐 Encrypted environment variables
- 👥 Team access control with roles (viewer, editor, admin)
- 🔒 Secure variable storage
- 📝 Variable versioning and history
- 💳 Pluggable payment provider architecture
- 🔌 Multiple provider support (Stripe, PayPal, Mock)
- 📋 Subscription management
- 💰 Flexible pricing plans
- 🔄 Easy provider switching
- 🔑 JWT-based authentication
- 🛡️ Rate limiting
- 📝 Activity logging
- 🔒 Password encryption
- 🚨 Security alerts
- 💳 Subscription management with pluggable providers
- 👨💼 Organization management
- 📊 Analytics dashboard
- 🔔 Activity logs
- 📧 Email notifications (ready)
- Rails 8 (API mode)
- PostgreSQL (production) / SQLite (development)
- RSpec for testing
- JWT for authentication
- Rack::Attack for rate limiting
- PaperTrail for versioning
- Sidekiq for background jobs
- React 18 with TypeScript
- TanStack Query for data fetching
- TanStack React Form with Zod validation
- Axios for HTTP requests
- Tailwind CSS v4 for styling
- shadcn/ui for components
- Vite for building
The payment system is designed to be pluggable and provider-agnostic. Currently supported:
- Mock Provider (default) - For development and testing
- Stripe - Full Stripe integration
- PayPal - PayPal payment processing
- Create a new provider class in
backend/app/services/payment_providers/ - Inherit from
PaymentProviders::BaseProvider - Implement all required methods
- Register in
PaymentProviders::Factory
Example:
class PaymentProviders::YourProvider < PaymentProviders::BaseProvider
def create_customer(email, name)
# Your implementation
end
# Implement other required methods...
end- Ruby 3.3.6
- Node.js 20+
- PostgreSQL (for production)
- Docker (for deployment)
cd backend
bundle install
rails db:create db:migrate
rails serverThe API will run on http://localhost:3000
cd frontend
npm install
npm run devThe frontend will run on http://localhost:5173
See .env.example files in backend/ and frontend/ directories for required environment variables.
# Backend tests
cd backend
bundle exec rspec
# Frontend tests (when added)
cd frontend
npm test- Configure your deployment settings in
config/deploy.yml - Set up secrets in
.kamal/secrets - Deploy:
kamal setup
kamal deployRAILS_MASTER_KEY- Rails master key for credentialsPOSTGRES_PASSWORD- Database passwordKAMAL_REGISTRY_PASSWORD- Container registry passwordDEFAULT_PAYMENT_PROVIDER- Payment provider (stripe, paypal, mock)STRIPE_SECRET_KEY- Stripe secret key (if using Stripe)PAYPAL_CLIENT_ID- PayPal client ID (if using PayPal)
GitHub Actions workflow is configured in .github/workflows/ci.yml:
- Runs tests on push/PR
- Builds frontend
- Deploys to production on main branch
POST /api/v1/auth/magic_link- Request magic linkPOST /api/v1/auth/verify- Verify magic link tokenPOST /api/v1/auth/login- Login with emailGET /api/v1/auth/me- Get current user
GET /api/v1/organizations/:id/payments/plans- Get available plansPOST /api/v1/organizations/:id/payments/checkout- Create checkout sessionGET /api/v1/organizations/:id/payments/subscription- Get subscriptionPOST /api/v1/organizations/:id/payments/cancel- Cancel subscriptionPOST /api/v1/organizations/:id/payments/webhook- Payment webhook
GET /api/v1/organizations/:id/environments- List environmentsPOST /api/v1/organizations/:id/environments- Create environmentGET /api/v1/organizations/:id/environments/:env_id/variables- List variablesPOST /api/v1/organizations/:id/environments/:env_id/variables- Add variableGET /api/v1/organizations/:id/environments/:env_id/variables/:key- Get variable valuePOST /api/v1/organizations/:id/environments/:env_id/accesses- Grant access
MIT