Platform Rules

These are non-negotiable. Every app on FreeAppStore must follow these principles:

One app per category

There will never be two chess apps, two audiobook readers, or two calendars. One in Free, one in Pro. That's it. No fragmentation.

Free means free

No freemium, no ads, no plans, no paywalls, no "upgrade to unlock." If it's on FreeAppStore, it stays free forever.

Real apps, not websites

Every app must work as a PWA. Save to home screen, use offline, feel native. If it only works in a browser tab, it's not ready.

Private by default

Zero tracking, zero analytics, zero cookies, zero data collection. All user data stays on-device in localStorage.

Open source

MIT license. Public repo on the freeappstore-online GitHub org. Anyone can read the code, verify privacy claims, and contribute.

Brand & Logo

Wordmark

The logo is a wordmark, not an icon. Written as one word with "App" highlighted in the platform accent color:

Naming rules

App naming

ContextFormatExample
GitHub repolowercase, no prefixfreebooks
Package namelowercase + "app"freebooksapp
Display nameSingle word, capitalizedBooks
Subdomainlowercase.freeappstore.onlinebooks.freeappstore.online

Colors

Shared neutral palette (all apps)

Every app uses the same neutral palette for UI chrome. Only the accent color differs per app.

TokenLightDarkUsage
--paper#fefdfb#141413Page background
--ink#1a1917#f2f0edPrimary text
--muted#8a8780#7a7770Secondary text
--line#e8e5e0#2a2825Borders
--panel#f5f3f0#1e1d1bPanel background
--glassrgba with 0.7 opacityFrosted glass overlays
--success#22c55e#4ade80Correct / positive
--warning#f59e0b#fbbf24Caution
--error#ef4444#f87171Wrong / destructive

App accent colors

Each app gets ONE accent color. Used for active states, primary buttons, and highlights.

AppAccentRationale
Chess#5b7db1Calm blue — strategic
Language#da5b37Warm terracotta — cultural
Math#4d70dcConfident blue — precise
Music#6ECE9ETeal green — creative
Puzzle#ff8a54Energetic orange — playful
Quiz#d86f4dWarm orange — engaging
Books#c08552Golden brown — literary

Typography

Font families

RoleFamilyWeightsUsage
BodyManrope400, 500, 600, 700, 800All UI text, labels, body
DisplayFraunces700, 800Headlines, card titles

Load fonts

<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Fraunces:opsz,wght@9..144,700;9..144,800&display=swap" rel="stylesheet">

Type scale

TokenSizeUsage
--text-xs0.65remLabels, badges, uppercase tags
--text-sm0.85remSecondary text, hints
--text-base1remBody text
--text-lg1.2remSubheadings
--text-xl1.5remSection titles
--text-2xl2remPage titles

Layout & Components

App shell

All apps use the same responsive shell pattern:

Desktop (≥1024px): ┌──────────────────────────────────────────┐ │ ┌─────────┐ ┌──────────────────────┐ │ │ │ Sidebar │ │ Main Content │ │ │ │ (17rem) │ │ │ │ │ │ │ │ │ │ │ │ - Nav │ │ │ │ │ │ - Tools │ │ │ │ │ └─────────┘ └──────────────────────┘ │ └──────────────────────────────────────────┘ Mobile (<1024px): ┌──────────────────────┐ │ App Header │ ├──────────────────────┤ │ │ │ Main Content │ │ │ ├──────────────────────┤ │ Bottom Dock │ └──────────────────────┘

Key measurements

ElementValue
Sidebar width17rem
Card border radius1.25rem
Button border radius0.75rem
Card padding1.5rem
Grid gap1.25rem
Page margin (mobile)1.5rem
Page margin (desktop)2rem

Component specs

Cards

Buttons

Mobile dock

Dark mode

All apps follow the system preference via prefers-color-scheme: dark. No manual toggle. Colors are defined as CSS custom properties with separate light/dark values.

Motion

App Types

Standalone apps (no backend)

Pure client-side apps with no server. All data lives in localStorage. No account required. Examples: Chess, Quiz, Puzzle, Math, Books.

Connected apps (shared backend)

Free and Pro versions share the same backend. Same database, same users. The free app provides limited features; the pro app unlocks the full experience.

Examples of connected apps

Bandmates — Free: discover bands, browse profiles. Pro: create bands, messaging, scheduling.
Meetup — Free: browse events, RSVP. Pro: create/host events, groups, analytics.
Language — Free: flashcards, exercises (local). Pro: AI translation, cloud sync.

Tech Stack

LayerChoiceVersion
LanguageTypeScript^5.7
FrameworkReact^19.0
BundlerVite^6.0
StylingTailwind CSS^4.1
Hosting (frontend)Cloudflare Pages
Backend (connected)FirebaseFirestore, Auth, Functions
Package Managerpnpm^10.30
Node≥20.19

Project structure

app-name/ ├── package.json (workspace root) ├── pnpm-workspace.yaml (packages: [web]) ├── .gitignore └── web/ ├── index.html ├── package.json (@appname/web) ├── vite.config.ts ├── tsconfig.json ├── public/ │ └── manifest.json (PWA manifest) └── src/ ├── main.tsx ├── index.css (Tailwind + CSS variables) ├── App.tsx ├── types.ts ├── components/ ├── hooks/ └── services/

Publishing Process

How apps get deployed

  1. Push to main — developer pushes code to the GitHub repo
  2. Cloudflare Pages builds — automatic build triggered on push (runs pnpm install && pnpm build)
  3. Deploy to edge — built assets deployed to Cloudflare's global CDN
  4. Live on subdomain — available at appname.freeappstore.online

No CI/CD configuration needed. No tokens to manage. Cloudflare Pages is connected directly to GitHub — push and it deploys.

How a new app gets listed

  1. Propose — Open an issue on GitHub describing the app and its category
  2. Build — Develop the app following these guidelines
  3. Review — The app is reviewed against the launch checklist below
  4. Publish — Repo is added to the org, CF Pages project is created, subdomain is assigned
  5. Listed — App card is added to the FreeAppStore landing page

Infrastructure setup (for maintainers)

# 1. Create GitHub repo gh repo create freeappstore-online/freeappname --public # 2. Create Cloudflare Pages project (via API) # - Connected to GitHub repo # - Build command: pnpm install && pnpm build # - Output dir: web/dist # - Node version: 22 # 3. Add custom domain # appname.freeappstore.online → CF Pages project # 4. Add app card to freeappstore landing page index.html

Launch Checklist

Every app must pass ALL of these before listing:

Functionality

Design

PWA

Privacy

Performance

Code

Ready to build?

Fork an existing app as a starting point, or start fresh. Either way, follow these guidelines and your app will fit right in.

GitHub Organization →