Marketing website for Dinaro — a licensed e-money institution offering payment accounts, card issuing, acquiring, and white-label fintech infrastructure.
| Layer | Technology |
|---|---|
| Framework | React 19 + React Router 7 |
| Build | Vite 8 |
| Styling | Inline JS styles + Tailwind CSS 4 |
| Animations | Motion (motion/react) v12 + GSAP |
| Fonts | Inter, DM Sans, Roboto Mono (Google Fonts) |
src/
├── pages/ # 19 route-level pages
├── components/ # Navbar, Footer, PageTransition, MobileFeaturePage, ErrorBoundary
├── hooks/ # useBreakpoint, usePreloadRoute
├── assets/ # SVG icons, partner logos, decorative graphics
├── data/ # termsData.js (Terms & Conditions HTML)
├── shared.js # Style helpers, gradient constants, nav data
├── App.jsx # Router, viewport scaling, page transitions
└── main.jsx # React entry point with ErrorBoundary
Products
/— Homepage/products/individuals— Individual accounts/products/business-account— Business accounts/products/debit-cards/individual— Individual debit cards/products/debit-cards/business— Business debit cards/products/emt— Electronic Money Transfer/products/acquiring/e-commerce— E-commerce acquiring/products/acquiring/payment-modules— Payment modules
Solutions
/solutions/banking-api— Banking API/solutions/cards-api— Cards API/solutions/whitelabel/onboarding— White-label onboarding/solutions/whitelabel/ramp— White-label ON/OFF ramp/solutions/whitelabel/custom— White-label custom
Company
/company— About/contact— Contact form/privacy-policy— Privacy policy/terms— Terms & conditions/complaints— Complaints
npm install
npm run dev # dev server at http://localhost:5173
npm run build # production build to /dist
npm run preview # preview production build
npm run optimize-svgs # run svgo on all assetsLayout
- Desktop canvas is fixed at 1728px wide with
zoomscaling applied to the document root - Pages use absolute positioning with pixel coordinates (designed at 1728px)
- Responsive breakpoints via
useBreakpointhook: mobile ≤768px, tablet ≤1024px, desktop >1024px - Mobile/tablet layouts are separate render paths within each page component
Styling
- All component styles are inline JS objects (
style={{ ... }}) - Style helpers in
shared.js:s.inter(weight, size, color, extra),s.dmSans(...),s.robotoMono(...) - Gradient backgrounds are pre-built data URI constants in
shared.js - Tailwind is available but used sparingly
Animations
- Page transitions:
AnimatePresence+motion.divkeyed by route inApp.jsx - Scroll animations:
whileInViewwithviewport={{ once: true }}on section elements - All animation logic lives in the component — no separate animation config files
Performance
- All pages are lazy-loaded via
React.lazy+Suspense - Routes are preloaded on hover via
usePreloadRoute - Vendor code is split into a separate chunk in
vite.config.js
Copy .env.example to .env and fill in values:
VITE_API_BASE_URL=
VITE_CONTACT_FORM_URL=
VITE_ENABLE_ANALYTICS=false
| Branch | Purpose |
|---|---|
main |
Stable production code |
animations |
Motion animation implementation |
responsive |
Mobile/tablet responsive layouts |