Skip to content

Introduction

ExchangePro helps you run an online currency exchange business: customers choose send/receive currencies, see rates and fees, create an exchange request, upload proof of payment, and track status until an administrator approves or rejects the transaction.

Core concepts

Exchange (transaction)

An exchange is a single customer order identified by an exchange ID (e.g. FZIEHJXG0ZW6). It includes:

  • Send and receive currency codes and amounts
  • Exchange rate, fees, and totals
  • Status workflow: pending → approved / cancelled / refunded
  • Optional proof fields (text, file uploads) configured per currency

Currencies

Each currency defines:

  • Display name and code (USD, EUR, BTC, etc.)
  • Buy/sell rates (manual or synced from an external API)
  • Min/max limits, fees, decimal precision
  • Status (active/inactive)
  • Linked form fields for proof submission

Currency prices (rate table)

The currency prices module stores market reference rates (often synced from ExchangeRate-API). Admins map these to operational buy/sell rates on currencies.

Proof fields

Currency form fields are dynamic inputs (text, email, file, image, select, etc.) shown when a user submits payment proof. Files are stored under the backend public/transaction-proofs/ directory.

Feature list

Public website

FeatureDescription
Home page editorHero, stats, rates, FAQ, testimonials, footer — editable from admin
Live rates showcasePublic API-driven rate display
Currency converterPublic converter using configured currencies
BlogCategories, posts, SEO fields
Legal pagesDynamic slugs (privacy, terms, etc.)
Contact formSubmissions in admin
NewsletterSubscriber list + broadcast email
SEOMeta, Open Graph, sitemap & robots settings
Custom CSSSite-wide CSS from admin

User dashboard (/dashboard)

FeatureRoute area
Overview stats/dashboard
New exchange/dashboard/exchange
Transactions & proof upload/dashboard/transactions
Profile & password/dashboard/profile
Support tickets/dashboard/support
Notifications/dashboard/notifications
Report bug / feature/dashboard/report-feature

Admin panel (/admin)

ModulePurpose
DashboardMetrics, trends, recent activity
ExchangesApprove, cancel, refund transactions
Currencies & pricesCRUD, rate sync, form fields
UsersCreate, edit, ban users
Blog & categoriesContent management
Legal pagesCMS for policy pages
Support ticketsReply to users
Contact submissionsInbox
SubscribersList + email broadcast
IP blockingBlock abusive IPs
Report & feature requestsUser feedback inbox
SettingsGeneral, logo, system, SEO, home page, social login, custom CSS, sitemap, robots
SystemCache clear, server info, application meta

Authentication

  • Email/password sign-in and sign-up (Sanctum cookie session)
  • Forgot / reset password (email link to frontend)
  • Optional Google and Facebook OAuth
  • Optional email verification (6-digit code)
  • First registered user becomes admin when no admin exists (details)

System automation

  • Hourly currency rate sync when enabled in admin (cron)
  • Database queue driver available for async jobs (default config uses database)

Technology stack

LayerPackages (main)
BackendLaravel 13, Sanctum 4, Socialite, PHP 8.3+
FrontendNuxt 4, Vue 3, Tailwind CSS 4, shadcn-vue, nuxt-auth-sanctum, TanStack Table, VeeValidate + Zod
DatabaseMySQL / MariaDB recommended; SQLite supported for local dev

URLs in development

Default local setup (adjust to your machine):

AppURLNotes
Frontendhttp://localhost:4000nuxt dev -p 4000
Backend APIhttp://localhost:8000 or custom portMust match API_URL in frontend .env
API prefix/api/...All JSON routes
Sanctum CSRF/sanctum/csrf-cookieCalled before login

Your frontend .env must set API_URL to the full origin of the Laravel app (no trailing slash), e.g. http://localhost:8000.

Need help? support@xorinlab.com · Website: xorinlab.com