My Railway Project - Green Vault Accounting

Green Vault Accounting - Full-Featured Business Management Suite

Hey everyone!
I’ve been working on a new business management platform called Green Vault Accounting - it includes full double-entry accounting, inventory management, employee scheduling, cloud storage, invoice management & generation, event planning, budgeting, and much more to come!

While the overall architecture is fairly straightforward, I wanted to share some of the technical decisions and implementation details that shaped the project.

Architecture & Setup

The system runs on a MySQL database and a Node.js API, both deployed on Railway. The API and database are hosted within the same Railway network, which means the database is kept completely private - only the API is public-facing. This setup provides an extra layer of security by isolating database access to internal traffic only.

On the frontend, I use ReactJS with Material UI, which is deployed with it's own mini NodeJS server, along with the primary website - this allows me to reverse proxy my web app through my main website.

I’m also making use of Cloudflare R2 for cloud storage; however, with Railway recently releasing their own storage buckets, I am planning on implementing those to store my encryption keys, and start working on add rotating encryption keys.

Authentication & Security Decisions

For authentication, I’ve implemented a standard refresh/access token flow:

  • Refresh tokens are stored in HTTP-only cookies.

  • The API exchanges them for short-lived access tokens.

  • Access tokens are used for most user operations.

This gives me a good balance of security and convenience, and the Railway environment variables make it easy to handle the required secrets cleanly.

Accounting Features & Technical Challenges

Building a full double-entry accounting system was by far the toughest part - mostly because I had to learn a lot of accounting concepts along the way.

One of the more unique features I added is tagging for journal entries.
These tags are user-defined and hierarchically structured, which allows users to visualize their categorized expenses using a Sankey graph. It’s a neat way to surface financial flows visually and helps businesses understand where their money is going.

Performance & Optimization

Since accounting data (like journal entries) can scale into the tens of thousands, performance optimization was key:

  • Client-side caching ensures smooth navigation between large data views (e.g., Accounts left_right_arrow emoji Journals).

  • Pagination and batch processing (500–1000 records per batch) are used for importing/exporting data to keep database operations fast and reliable.

  • Signed upload/download URL's will be something I plan on implementing soon to offload the network costs of downloading and uploading files to the client instead of my server.

User Roles & Permissions

Green Vault Accounting supports a flexible user permissions system:

  • You can invite existing users to one or more companies and fine-tune permissions per section (e.g., read-only access to Accounts, full access to Journals).

  • All permissions are validated server-side for security but also cached locally for instant feedback in the UI.

  • There’s also support for restricted users (e.g., inventory staff) who can only access specific sections for an additional $2/user/month.

I Love Railway smiling_face_with_three_hearts emoji

I use Railway’s PRO features to enable SMTP support with Nodemailer - this powers the invoice system. Users can generate PDFs and send them to customers directly from their company domain. Future updates may allow users to link their personal email accounts for sending invoices as well. I will also be using the pro feature to keep constant backups of my database. Also, having the ability to manage different environments such a development and production has been insurmountably helpful when it comes to testing. It has been so nice to run the api locally - connect to the remote public facing development database, and know I am not effecting any production or real user data. Which is also crucial when performing database migrations so that I can fully test changes before publishing.

Current Stage

Right now, we’re in the testing phase, polishing up some of the core features before release.
If you’re interested in trying it out or offering feedback, I’d love for you to test it at greenvaultaccounting.com!

Closing Thoughts

This is my first major project involving deploying and maintaining cloud services, and using Railway has made that process incredibly smooth. From easy service linking to variable references, the developer experience has been amazing.

If anyone’s curious about any part of the stack - authentication flow, permissions logic, or how I structure the MySQL schema - I’d be happy to dive deeper!

2 Replies

I don't know how to attach images into the main post other than imbedding the links - so I am just going to use this comment/replay to add the images!


4 months ago

![Alt text](https://user-images.githubusercontent.com/.../image.png)

![Railway Logs](https://your-image-host.com/logs-example.png)

![Database UI Screenshot](./images/database-view.png)

![screenshot](https://i.imgur.com/yourimage.png)


Loading...