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