Live at prairietax.ca
Full-Stack Web Platform — Canada

Prairie Accounting
& Tax Partners

A production-deployed, full-stack accounting and tax platform for Canadian individuals and small businesses — built with React, Node.js/Express, and MySQL on Hostinger's managed Node.js hosting.

↗ Visit prairietax.ca 🇨🇦 Serving Clients Across Canada
40+
React Pages & Routes
11
API Route Modules
7
MySQL Tables
9
Client Services Offered
v18
Node.js Runtime
System Architecture

Full-Stack, Production-Deployed

A monorepo (apps/web + apps/api) built for Hostinger's Node.js hosting. The Express API serves both the REST backend and the Vite-built React SPA as a single deployment unit — no separate hosting required.

Frontend
React 18 Vite 7 React Router v7 Tailwind CSS v3 shadcn/ui + Radix UI Framer Motion Recharts React Hook Form + Zod React Helmet (SEO) Lucide React
Backend API
Express 5 Node.js v18 ESM JWT Auth (jsonwebtoken) bcryptjs Helmet.js express-rate-limit morgan Nodemailer SMTP zod validation date-fns-tz
Database
MySQL (mysql2) Connection Pooling PocketBase (legacy adapter) Repository Pattern UUID primary keys
Engines
Tax Calculator Engine CPP Two-Tier Solver Decision Engine (tokenizer/parser) Tax Credit Matching Engine Scheduling & Slot Engine Phase 2 Analytics Engine
Infra
Hostinger Node.js Hosting SPA Fallback (Express static) Graceful Shutdown (SIGTERM) hCGI API Prefix ICS Calendar (.ics export) Google Analytics (gtag)
What the Platform Offers Clients

Nine Professional Services

Every service is bookable directly through the platform — with real-time availability, automated confirmations, and calendar exports built in.

T1
Personal Tax Filing
T1 returns, CRA correspondence support, and tax planning for Canadian individuals.
  • T1 personal returns
  • Prior year amendments
  • CRA dispute support
  • Tax optimization planning
T2
Small Business Tax Filing
T2 corporate returns, HST/GST filing, and compliance for Canadian businesses.
  • T2 corporate returns
  • HST/GST filing & planning
  • Tax compliance deadlines
  • Business tax optimization
📒
Bookkeeping & Compilation
Monthly bookkeeping, financial statements, and bank reconciliation.
  • Monthly bookkeeping
  • Financial statement compilation
  • AP/AR management
  • Bank reconciliation
☁️
Cloud Accounting Setup
QuickBooks Online, Xero implementation, data migration, and team training.
  • QuickBooks Online setup
  • Xero implementation
  • Data migration
  • Staff training & support
Accounting Automation
Workflow automation, bank feeds, automated reporting and process optimization.
  • Bank feed automation
  • Automated reporting
  • Workflow optimization
  • Process documentation
🏢
Outsourced Accounting
Full accounting function, financial reporting, payroll, and compliance management.
  • Complete accounting function
  • Financial reporting
  • Payroll processing
  • Compliance management
📊
Fractional CFO Services
Strategic financial leadership — planning, cash flow, budgeting, and board reporting.
  • Financial strategy & planning
  • Cash flow management
  • Budgeting & forecasting
  • Board reporting
💼
Software Advisory
ERP evaluation, software selection consulting, and integration planning support.
  • Software selection consulting
  • ERP system evaluation
  • Implementation planning
  • Integration support
💵
Payroll Management
Accurate, compliant payroll processing by PCP-certified professionals.
  • PCP-certified professionals
  • Payroll processing
  • CRA remittances
  • ROE & T4 filing
Developer Engineering Highlights

What's Built Under the Hood

This isn't a template site — every core feature is custom-engineered for the Canadian accounting context.

Decision Engine
Custom Rule Tokenizer & Parser
The questionnaire and services system uses a hand-built tokenizer/parser for boolean rule evaluation — no eval(), no external library. Supports AND/OR/NOT, comparison operators, nested parentheses, and multi-type operands.
  • Full tokenizer with type classification
  • Recursive descent parser for nested rules
  • Operators: =, !=, >, <, >=, <= with type coercion
  • AND / OR / NOT boolean combinators
Booking System
Smart Scheduling & Slot Engine
Real-time slot generation from admin-defined availability windows, conflict detection against confirmed bookings, blackout date enforcement, timezone-aware date handling (date-fns-tz), and .ics calendar export for client confirmations.
  • Dynamic slot generation per service duration
  • Booking conflict detection (overlap algorithm)
  • Blackout dates + holiday calendar enforcement
  • Optimistic slot locking (race-condition safe)
  • .ics calendar export (RFC 5545)
Admin Portal

Full-Featured Operations Dashboard

JWT-protected admin portal with real-time auto-refresh (30s intervals), comprehensive booking management, and Phase 2 analytics that go well beyond a typical CMS.

📅
Booking Management
Confirm, reschedule, cancel. Full booking history with status filters and client details.
🗓️
Availability Control
Set per-day-of-week windows, blackout dates, and holiday calendar. Changes take effect immediately.
🛠️
Services Manager
Create, edit, and toggle services. Control name, price, duration, and availability per service.
📬
Lead Pipeline
Contact form leads tracked with status (new → contacted → converted). Source attribution included.
💰
Revenue Analytics
Revenue by period, service type, and comparison to prior period. Booking count and trend tracking.
🔁
Funnel Tracking
Conversion funnel from lead to booking. Drop-off analysis by stage, source, and service type.
👥
Audience Breakdown
Client segmentation by source, service type, geography. Drill into segments for deep analysis.
📊
Cohort Analysis
Retention and repeat-booking cohort tracking. Identify high-value client segments over time.
🔔
Alerts Dashboard
Configurable operational alerts — missed confirmations, cancellation spikes, revenue drops.
📧
SMTP Configuration
Admin-configurable SMTP settings in-dashboard. Supports custom domain email for all client communications.
👨‍💼
Manager Accounts
Multi-manager support with role-based access. Separate account page and credential management.
📥
Data Import
Bulk import tools for migrating historical booking and client data into the MySQL backend.
Automated Client Communications

Four Transactional Email Templates

Every client touchpoint is automated — HTML templates rendered server-side via Nodemailer, with custom domain SMTP configured in-dashboard.

📨 Email Trigger Events
New Booking ConfirmedconfirmationEmail.js
24-Hour Reminderreminder24hEmail.js
2-Hour Reminderreminder2hEmail.js
Booking CancelledcancellationEmail.js
Password Reset Tokenauth.js route
.ics Calendar Attachmentics.js (RFC 5545)
🔒 Security & Rate Limiting
Helmet.js HTTP headersAll routes
Global rate limiterExpress middleware
Per-route rate limitersAuth, booking routes
JWT access tokensHS256, expiry-gated
bcryptjs password hashingAdmin credentials
hCaptcha validationContact & booking forms
User Experience

Five-Step Booking Flow

From landing page to confirmed appointment — the entire flow runs without page reloads, driven by a global BookingContext and a modal overlay that works from any page.

01
Select Service
Choose from active services with duration and pricing pulled live from the API
02
Pick Date & Time
Real-time slot availability; blackout dates and existing bookings automatically excluded
03
Enter Details
Name, email, phone, and notes — validated client-side with Zod before submission
04
Confirm Booking
Slot locked optimistically; booking reference ID generated and persisted to MySQL
05
Email + Calendar
Confirmation email sent immediately with .ics calendar attachment (Google / Outlook compatible)
Data Layer

MySQL Schema — 7 Tables

Normalized MySQL schema with UUID primary keys, foreign key constraints, and composite indexes optimized for the booking and analytics query patterns.

admin_users
idPK CHAR(36)
emailVARCHAR UNIQUE
full_nameVARCHAR
password_hashVARCHAR
roleVARCHAR
is_activeTINYINT
bookings
idPK CHAR(36)
booking_ref_idCHAR UNIQUE
service_idFK → services
client_name / emailVARCHAR
start_time / end_timeDATETIME
statusconfirmed|cancelled
services
idPK CHAR(36)
name / slugVARCHAR UNIQUE
descriptionTEXT
duration_minutesINT
priceDECIMAL(10,2)
is_activeTINYINT
availability_rules
idPK CHAR(36)
day_of_weekTINYINT 0–6
start_timeTIME
end_timeTIME
is_activeTINYINT
leads
idPK CHAR(36)
name / emailVARCHAR
sourceVARCHAR
statusnew|contacted|converted
idx_leads_status_createdINDEX
blackout_dates + reset_tokens
blackout_dateDATE UNIQUE
reasonVARCHAR
tokenVARCHAR UNIQUE
token_typeVARCHAR
expires_atDATETIME
used_atDATETIME NULL
Full Technology Stack

Production-Grade Dependencies

Every library chosen for reliability, bundle efficiency, and Node.js v18 compatibility on Hostinger's managed hosting environment.

Frontend — React 18
React 18 Vite 7 React Router v7 Tailwind CSS v3 shadcn/ui Radix UI (full suite) Framer Motion Recharts React Hook Form Zod React Helmet Lucide React date-fns v3 sonner qrcode.react html2canvas PocketBase SDK
Backend — Node.js / Express
Node.js v18 (ESM) Express 5 mysql2 (pooled) jsonwebtoken bcryptjs Nodemailer Helmet.js express-rate-limit morgan dotenv zod date-fns-tz uuid node-fetch axios
Infrastructure & Tooling
Hostinger Node.js MySQL (managed) Hostinger hCGI API Vitest (API tests) ESLint v9 Google Analytics (gtag) hCaptcha ICS / RFC 5545 Custom SMTP config CORS + trust proxy Graceful SIGTERM LLMs.txt generator
Deployment & DevOps

Hostinger Node.js — Production Ready

The platform ships as a curated deployment bundle (v7) — monorepo structured, single-command deployable, with a phased migration strategy from PocketBase to MySQL.

⚙️ Deployment Architecture
Single Express Process — SPA + API
The Express server statically serves the Vite-built React app and handles all API routes under /hcgi/api — one process, one port, one hosting plan.
Graceful Shutdown (SIGINT + SIGTERM)
Server drains in-flight requests, closes the MySQL connection pool, and exits cleanly — preventing data corruption on container restarts.
Data Backend Abstraction
Repository pattern with swappable backends (DATA_BACKEND=mysql or pocketbase). Migrated from PocketBase to MySQL without rewriting route handlers.
Bootstrap + Auto-Setup on Start
Default admin user and Phase 1 seed data auto-bootstrap on first run. Idempotent — safe to restart without duplicate data.
📋 Production Checklist
MySQL Schema Migration
Hand-crafted SQL schema with FK constraints, composite indexes on hot query paths (status + start_time), and safe upgrade path documented.
Environment-Aware Config
dotenv with full .env template provided. CORS origin, SMTP, JWT secret, DB credentials, and captcha keys all externalized — zero secrets in code.
Error Observability
Structured morgan HTTP logging, uncaughtException + unhandledRejection process handlers, diagnostic logger for slot generation and booking flows.
Automated API Test Suite
Vitest-based verification test suite (verification.test.js, 33KB) covering auth, bookings, availability, and edge-case flows for production confidence.
Client Reviews — Live on the Platform

Real Client Testimonials

Featured on the live site — five-star Google reviews from verified clients served through the platform.

★★★★★
"Truly professional and detail-oriented, making sure every aspect of the process is handled carefully. They never rush and ensure everything is accurate and well-explained. Their commitment to quality really shows."
Mahfuz Rashed
★★★★★
"This isn't just 'getting your taxes done' — it's a masterclass in how professional service should actually work. Every question was met with a crystal-clear answer. If you're looking for someone who actually knows their stuff, stop looking."
Salman Shahjalal
★★★★★
"Very professional, responsive, and detail-oriented. They made everything simple and stress-free. Highly recommended for anyone looking for reliable accounting and tax services across Canada."
Kazi Zahid Ahmed