The official website for Flash — Jamaica's Bitcoin wallet and merchant rewards platform, powered by Lightning Network.
Live site: https://getflash.io
Staging: https://staging.getflash.io
Branch: staging-revamp (production branch on Vercel)
| Product | Description |
|---|---|
| Flash Mobile | Bitcoin/Lightning wallet app — iOS & Android |
| Flash POS | Point-of-sale system for merchants |
| Flash Card | Physical tap-to-pay rewards card |
| Flash API | RESTful + WebSocket API for developers |
- Pure HTML/CSS/JS — no frontend framework dependencies
- Component-based — shared
header.htmlandfooter.htmlloaded via fetch at runtime - CSS custom properties — design tokens in
css/main.css; page-scoped tokens incss/pages/ - Google Maps API —
AdvancedMarkerElement, Places TextQuery (merchant map) - Nostr (
nostr-tools@2.23.3) — NIP-17 gift wrap DMs on merchant profile pages - GSAP — lightning animation on homepage (
js/modules/lightning.js) - Fonts — Sora (700/800 headings) + Inter (400/500 body) via Google Fonts
flash-site/
├── index.html # Homepage (dark theme, body.home-page scoped)
├── mission.html # Mission page
├── rewards.html # Rewards program
├── team.html # Team + open positions + job application modal
├── faq.html # FAQ
├── 404.html # "Lost in the mempool" error page
│
├── map/
│ └── index.html # Merchant map — full-screen Google Maps
│ Centers on Jamaica, Flash-branded pins,
│ bottom sheet on pin tap, search, mock fallback
│
├── merchant/
│ └── index.html # Merchant profile page (/merchant/?u=username)
│ Google Places enrichment, Lightning QR,
│ NIP-17 ephemeral chat (no sign-in required)
│
├── app/ # App download page
├── blog/ # Blog posts
├── legal/
│ ├── terms.html # Terms & Conditions
│ └── privacy.html # Privacy Policy
│
├── components/
│ ├── header.html # Global nav (fetched via XHR, bypasses CDN cache)
│ └── footer.html # Global footer (always dark; El Salvador disclaimer)
│
├── css/
│ ├── main.css # Global styles, design tokens, component styles
│ └── pages/ # Page-specific stylesheets
│ ├── home.css # Homepage (dark hero, trust strip, how-it-works)
│ ├── team.css # Team grid, job cards, "This Could Be You!" card
│ ├── rewards.css # Rewards page
│ ├── mission.css # Mission page
│ └── map.css # (empty — map styles are inline in map/index.html)
│
├── js/
│ ├── core/
│ │ ├── components.js # Header/footer loader
│ │ ├── dark-mode-init.js
│ │ └── main.js # Scroll-reveal, stat counters
│ └── modules/
│ ├── animations.js # Hero phone float, scroll-reveal, stat counters
│ ├── lightning.js # GSAP lightning strike animation (v3)
│ ├── jobFilters.js # Team page: job card expand/collapse, search, filter
│ └── btcPrice.js # Bitcoin price ticker in footer
│
└── assets/
├── img/ # Images, logos, merchant photos
└── fontawesome/ # Font Awesome (local, for legacy pages)
Dark-themed landing page. Sections in order:
#pg-hero— headline, subhead, app store CTAs, trust strip, stat bar#pg-ways— 3 use cases (Send Money Home, Buy Bitcoin, Spend)#pg-remittance— how it works + fee breakdown.mid-page-CTA— download CTA#pg-merchants— merchant ecosystem#pg-testimonials— customer testimonials.merchant-CTA— merchant sign-up CTA.contact-strip— email + WhatsApp contact strip
Hero stats: 0% transfer fee · <3s transfer speed · 34+ Merchants 🇯🇲
Hero subhead: "Receive in seconds — no bank account needed."
Full-screen map centered on Jamaica ({lat: 18.1096, lng: -77.2975}, zoom 10).
- API:
businessMapMarkersGraphQL query →{coordinates, title, username} - Fallback: 12 mock merchants displayed when API is unavailable (staging CORS)
- Pin tap: Bottom sheet → merchant name, Flash Pay badge, Get Directions + View Profile
- View Profile →
/merchant/?u={username} - CORS logic:
getflash.io→ direct API; staging →api.test.flashapp.me; localhost → corsproxy.io
URL: /merchant/?u={username}
- Hero — merchant name, avatar, "Flash Merchant" badge, Google Places enrichment (address, phone, rating, open/closed, website)
- Pay with Flash — QR code for
pay.flashapp.me/{username}+ button - Nostr chat — NIP-17 gift wrap DMs, ephemeral keypair per session, no login required
API queries:
npubByUsername(username)→{npub}→ decoded to hex viaNostrTools.nip19.decode()businessMapMarkers→ filtered by username for title + coords → Google Places TextQuery- Fallback: 4 mock merchants (tastee_nk, islandgrill_hwt, doctorscave, ochi_jerk)
Nostr relay list: damus, primal, snort, nostr.mom, nostr.bg, nostr-pub.wellorder.net
| Token | Value | Usage |
|---|---|---|
--green |
#3AB54A / #41AD49 |
CTAs, success states, key numbers, logo only |
--dark |
#09090E |
Dark backgrounds, footer |
--mid |
#0D0D14 |
Footer utils row |
--text |
#111218 |
Body text (light mode) |
Green is sacred — never use decoratively. Reserved for: primary CTAs, success states, balance/key numbers, brand moments, logo.
- Headings: Sora 700/800
- Body: Inter 400/500
- Roboto is fully removed.
- Site default: light mode
- Homepage: always dark —
body.home-pagescoped CSS tokens - Footer: always dark — hardcoded
#09090E/#0D0D14regardless of theme
Hero trust strip + footer trust badges use frosted glass pill:
background: rgba(255,255,255,0.07);
border: 1px solid rgba(255,255,255,0.12);
border-radius: 100px;
padding: 6px 12px;- El Salvador disclaimer MUST remain on every page in
.footer-btm:"Island Bitcoin C.A. de S.V. entity is regulated by BCR and by the Superintendent of the Financial System of El Salvador"
- Privacy Policy and Terms of Service links must remain in footer.
- Never use "Banking" — regulatory flag.
- Never claim BOJ/regulatory compliance — Flash is not yet regulated by BOJ.
- No investment language — no "earn", "grow", "profit", "returns".
- Fiat First — always show JMD amounts before Bitcoin/sats.
- No "remittance" — replaced sitewide with "send money home" / "transfer" / "family payment".
- No Western Union brand mentions anywhere on the site.
- Merchant POS signup always →
https://signup.getflash.io - Fee accuracy: Flash transfer fee = 0%; on-ramp = 1–3% (third-party); cash-out to Jamaican bank = 2% (Flash fee).
- No "Home" nav link — logo handles home navigation.
- Do NOT touch
/treasure-huntor/treasure-hunt-for-real-this-time-2140(KOTC pages).
| Stat | Value | Use |
|---|---|---|
| Downloads | 10k+ | App download page only |
| Active users | 2,500+ | Internal reference only |
| Merchants | 34+ | Heroes, rewards, merchant sections |
| Google Play rating | 5.0 ★ (3 reviews) | App download page |
| Hero stats | 0% fee · <3s · 34+ merchants | Homepage hero bar |
body.home-page → scoped dark theme tokens for homepage
body.light-mode → site default (light)
section:not(.pg-download) > * + * { padding-top: 120px } → global section spacing
- Nav:
.main-navis the SAME<ul>on desktop and mobile. Scope drawer-only styles to@media (max-width: 799px)— never apply unscoped rules to.main-nav. - Job cards: HTML has
class="job-card collapsed". JS toggles.expanded. CSS keys on.job-card.expanded. - Mobile logo:
position: absolute; left: 50%; transform: translateX(-50%)at ≤799px. - Hero body DOM:
<canvas>(display:none) and.hero-bg(position:absolute) are DOM siblings of.hero-body, causing it to match> * + *rule. Override:#pg-hero .hero-body { padding-top: 0 }.
| Module | Purpose |
|---|---|
js/modules/lightning.js |
GSAP SVG lightning strikes on homepage hero. Strike count 15 triggers KOTC easter egg. |
js/modules/animations.js |
Scroll-reveal (IntersectionObserver + data-reveal), stat counters, hero phone float |
js/modules/jobFilters.js |
Team page: expand/collapse job cards, search, filter, file upload, application modal |
js/modules/btcPrice.js |
Bitcoin price ticker in footer |
js/core/components.js |
Fetches components/header.html + components/footer.html and injects them |
- CI: Vercel auto-deploys from
staging-revampbranch →staging.getflash.io - Deploy time: ~36–48 seconds after
git push - Cache:
index.htmlis CDN-cached;components/header.htmlis fetched via XHR at runtime (bypasses cache) - Production merge:
staging-revamp→mainwhen approved
- Map CORS:
api.test.flashapp.meblocks requests fromstaging.getflash.io— map and merchant profile pages use mock fallback data on staging. Self-resolves ongetflash.ioproduction domain. - Map filter icons: broken on staging (CORS). Self-resolves on prod.
- Wire job application email backend (recommend Formspree — 5-min setup)
- Fix team.html modal dark mode:
#application-modalform inputs invisible in dark mode - Map page: CORS issue self-resolves on prod domain
- Consider adding
/merchant/?u=usernameto sitemap
- Website: https://getflash.io
- Support: support@getflash.io / WhatsApp +18762536977
- X: @LNFlash
- GitHub: lnflash
- Nostr:
npub1l080awn9wsw87ywm3flmpmccf5rmlvhd7vfgspj2pnavxupnlfesmflash
© 2026 Flash / Island Bitcoin. All rights reserved.