<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chris Lloyd Fallaria</title>
    <description>The latest articles on DEV Community by Chris Lloyd Fallaria (@chrislfallaria).</description>
    <link>https://dev.to/chrislfallaria</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3908488%2Ff1a01733-eafb-43fb-b97c-767dc1ecddb9.png</url>
      <title>DEV Community: Chris Lloyd Fallaria</title>
      <link>https://dev.to/chrislfallaria</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chrislfallaria"/>
    <language>en</language>
    <item>
      <title>How I Built a Production-Ready Voucher Management System with Laravel 12 and Vue 3</title>
      <dc:creator>Chris Lloyd Fallaria</dc:creator>
      <pubDate>Sat, 02 May 2026 06:14:06 +0000</pubDate>
      <link>https://dev.to/chrislfallaria/how-i-built-a-production-ready-voucher-management-system-with-laravel-12-and-vue-3-3dl0</link>
      <guid>https://dev.to/chrislfallaria/how-i-built-a-production-ready-voucher-management-system-with-laravel-12-and-vue-3-3dl0</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I'm a CS student in the Philippines. During my time observing how &lt;br&gt;
offices work, I noticed something that kept bothering me.&lt;/p&gt;

&lt;p&gt;Voucher processing is still done manually almost everywhere. &lt;br&gt;
Someone fills out a paper form, hands it to the next office, &lt;br&gt;
that office stamps it and passes it again, and so on — until &lt;br&gt;
it either gets done or gets lost on someone's desk.&lt;/p&gt;

&lt;p&gt;No tracking. No visibility. The client has no idea where their &lt;br&gt;
request is. The admin has no data. Staff have no accountability.&lt;/p&gt;

&lt;p&gt;I kept thinking — this is exactly the kind of problem software &lt;br&gt;
should solve. So I spent the last few months building it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;VMMS stands for Voucher Management &amp;amp; Monitoring System.&lt;/p&gt;

&lt;p&gt;It handles the entire voucher request process — from the moment &lt;br&gt;
a client submits a request, all the way through each department &lt;br&gt;
that needs to process it, until it's finally released.&lt;/p&gt;

&lt;p&gt;No paper. No manual routing. No "what's the status of my request?"&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;I went with what I know best:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Laravel 12&lt;/strong&gt; for the backend — routing, queues, and email jobs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vue 3 (Composition API)&lt;/strong&gt; for the frontend — reactive and clean&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inertia.js v2&lt;/strong&gt; — so I don't have to build a separate API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS + Vuetify 3&lt;/strong&gt; — for UI components and styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MySQL 8.0&lt;/strong&gt; — for the relational data and complex queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resend&lt;/strong&gt; — for transactional emails&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What It Can Do
&lt;/h2&gt;

&lt;p&gt;There are three separate panels depending on your role:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin&lt;/strong&gt;&lt;br&gt;
You get full control — manage users, voucher types, and see &lt;br&gt;
everything through an analytics dashboard. There's a staff &lt;br&gt;
performance leaderboard, rejection rate charts, audit logs, &lt;br&gt;
and even custom branding options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Staff&lt;/strong&gt;&lt;br&gt;
Each department gets their own queue of requests to process. &lt;br&gt;
You can complete, reject, or flag a request for missing documents. &lt;br&gt;
There's also a personal performance dashboard showing your stats &lt;br&gt;
and ratings from clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Client&lt;/strong&gt;&lt;br&gt;
You submit requests online, track which department is currently &lt;br&gt;
processing your voucher in real time, upload corrected documents &lt;br&gt;
if something gets flagged, and rate the staff after it's done.&lt;/p&gt;

&lt;p&gt;Some other things worth mentioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deadlines are holiday-aware — staff don't get penalized for 
non-working days&lt;/li&gt;
&lt;li&gt;Every action is logged in an audit trail&lt;/li&gt;
&lt;li&gt;PDF and Excel exports on all reports&lt;/li&gt;
&lt;li&gt;Automated email notifications at every stage&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Parts That Were Actually Hard
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Date queries across MySQL and MariaDB&lt;/strong&gt;&lt;br&gt;
I originally wrote date queries using MySQL-specific functions &lt;br&gt;
like MONTH() and MONTHNAME(). Broke on MariaDB. Had to rewrite &lt;br&gt;
everything to use Carbon instead — which honestly ended up &lt;br&gt;
being cleaner anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pipeline tracker&lt;/strong&gt;&lt;br&gt;
Getting the pipeline stepper to accurately show which department &lt;br&gt;
is currently processing a request was trickier than I expected. &lt;br&gt;
Especially edge cases — what if a department is skipped? What if &lt;br&gt;
a request gets returned for missing documents mid-flow? Took a &lt;br&gt;
few rewrites to get right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holiday-aware deadlines&lt;/strong&gt;&lt;br&gt;
I built a DateHelpers service that calculates business days &lt;br&gt;
while excluding weekends and holidays. Sounds simple, took way &lt;br&gt;
longer than expected. Really happy with how it turned out though.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;🔴 Live demo: &lt;a href="https://vmms-app-production.up.railway.app/login" rel="noopener noreferrer"&gt;https://vmms-app-production.up.railway.app/login&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Credentials if you want to explore:&lt;/p&gt;

&lt;p&gt;Admin: &lt;a href="mailto:admin@vmms.demo"&gt;admin@vmms.demo&lt;/a&gt; | Password: Admin@Demo123!&lt;br&gt;
Staff:  &lt;a href="mailto:staff.infra@vmms.demo"&gt;staff.infra@vmms.demo&lt;/a&gt; | &lt;a href="mailto:staff.budget@vmms.demo"&gt;staff.budget@vmms.demo&lt;/a&gt; | &lt;a href="mailto:staff.procurement@vmms.demo"&gt;staff.procurement@vmms.demo&lt;/a&gt; | &lt;a href="mailto:staff.supply@vmms.demo"&gt;staff.supply@vmms.demo&lt;/a&gt; | &lt;a href="mailto:staff.executive@vmms.demo"&gt;staff.executive@vmms.demo&lt;/a&gt; | Password: Staff@Demo123!&lt;br&gt;
Client: &lt;a href="mailto:client@vmms.demo"&gt;client@vmms.demo&lt;/a&gt; | Password: Client@Demo123!&lt;/p&gt;




&lt;h2&gt;
  
  
  It's Available on Gumroad
&lt;/h2&gt;

&lt;p&gt;I'm selling VMMS in two versions:&lt;/p&gt;

&lt;p&gt;🔒 &lt;strong&gt;Obfuscated / Protected — $99&lt;/strong&gt;&lt;br&gt;
Deploy it as-is. PHP backend is protected, Vue frontend and &lt;br&gt;
config files are fully readable. Good for offices and &lt;br&gt;
institutions that just want to run it.&lt;/p&gt;

&lt;p&gt;👨‍💻 &lt;strong&gt;Full Source Code — $300&lt;/strong&gt;&lt;br&gt;
Every file is readable and editable. Good for developers who &lt;br&gt;
want to customize it for a specific client or use case.&lt;/p&gt;

&lt;p&gt;Both versions come with documentation, a quick start guide, &lt;br&gt;
and deployment configs for Nginx, Apache, and Railway.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://getvmms.gumroad.com/l/zeroqz" rel="noopener noreferrer"&gt;https://getvmms.gumroad.com/l/zeroqz&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Happy to answer questions in the comments — whether about &lt;br&gt;
the build, the tech stack, or anything else. 🚀&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
