Maybe is an open-source personal finance application built for individuals who want to self-host their financial data without relying on third-party services. It provides a clean interface for tracking income, expenses, and budgets, with a focus on privacy and user control. Originally developed by Maybe Finance Inc., it is now unmaintained but remains fully functional and available under AGPLv3 for forking.
The app is built with Ruby on Rails, PostgreSQL, Hotwire, Turbo, and StimulusJS, enabling a dynamic, server-rendered UI without traditional JavaScript frameworks. It supports Docker-based deployment for easy self-hosting and includes a seeded demo environment for quick testing and development.
What You Get
- Self-hosted finance tracking - Run the entire personal finance app on your own server using Docker, ensuring full data ownership and privacy.
- Hotwire & Turbo integration - Uses Hotwire (Turbo Frames and Turbo Streams) for server-driven dynamic UI updates without JavaScript frameworks.
- PostgreSQL database - Stores all financial data in PostgreSQL, supporting robust querying for budgets, categories, and transaction history.
- Docker-based deployment - Official Docker setup guides allow users to deploy Maybe with a single command, including database and Redis services.
- Demo data seeding - Includes rake tasks to load sample transactions, accounts, and budgets for testing and onboarding new users.
- StimulusJS for interactivity - Uses StimulusJS to handle client-side interactions like form validation and dynamic UI elements without full framework overhead.
Common Use Cases
- Privacy-focused individuals - Users who refuse to share financial data with cloud services use Maybe to self-host their budgeting app on a home server.
- Developers building finance tools - Developers fork Maybe to learn Hotwire/Turbo patterns or extend it with custom reports and bank integrations.
- Tech-savvy households - Families managing shared expenses use Maybe’s transaction categorization and budget tracking to monitor spending without subscriptions.
- Open-source contributors - Developers contribute to the codebase to improve UI/UX or add features like CSV imports or multi-user support.
Under The Hood
Architecture
- Rails-based monolithic architecture with clear MVC separation, where controllers delegate complex logic to background jobs and leverage concerns like Accountable for reusable, polymorphic account handling
- Domain-driven design patterns encapsulate financial account types with class-level methods for display and balance logic, promoting DRY principles across the model layer
- Dependency injection via Current.user and Current.session singletons ensures consistent user context and impersonation flows throughout the application
- ViewComponent-based UI architecture enables reusable, testable components that reduce duplication and enforce design consistency
- Event-driven background processing with Sidekiq decouples long-running operations like data synchronization from HTTP request cycles
- Full adherence to Rails conventions with Active Record, Turbo, and Hotwire creating a seamless, server-rendered interactive experience
Tech Stack
- Ruby on Rails 7.2.2 backend with PostgreSQL and Redis for data storage and background job orchestration
- Hotwire stack (Turbo, Stimulus, ViewComponent) powers dynamic, real-time UI without requiring a separate frontend framework
- Asset pipeline built on Propshaft and Tailwind CSS, with importmaps for modular JavaScript management
- Docker-based deployment using multi-stage builds to optimize image size and production security
- Comprehensive tooling including Biome, RuboCop with rails-omakase, and Sidekiq-Cron for consistent code quality and job scheduling
- Integrated observability via Sentry, Rack::MiniProfiler, Vernier, and Logtail for performance and error monitoring
Code Quality
- Extensive test coverage spanning unit, integration, and system tests with clear separation and meaningful assertions
- Consistent naming conventions and namespace organization reflect strong domain-driven structure
- Robust error handling in APIs with appropriate HTTP status codes and user-friendly messages
- Strong type safety through Active Record associations and strong parameters, minimizing raw SQL and dynamic calls
- Linting and static analysis practices are implicitly followed through Rails conventions, though explicit tooling configuration is not visible
What Makes It Unique
- Hyper-localized UI support with culturally nuanced language variants embedded directly in the interface, avoiding external i18n dependencies
- Declarative donut charts driven by data attributes, rendering dynamic visualizations without JavaScript frameworks
- Real-time chat thinking indicators via Turbo Streams that simulate conversational AI within a traditional server-rendered stack
- Component-driven UI system using ViewComponent and Turbo modals that delivers SPA-like interactivity while staying true to Rails conventions
- Seamless embedding of interactive financial visualizations and summaries directly into server-rendered templates, eliminating the need for separate SPAs