Cryptocurrency Tracker docs
v2.0.0
Live demoConsole demo Get help
● Start · For first-timers

Step-by-step setup
no Firebase experience needed.

The whole path from the download to your app on a phone, one small step at a time, with what you should see after each step. If you have never used a terminal or Firebase, start here. Plan an afternoon.

8 partsAbout 3 to 4 hours the first timeScreenshots of the console

01Before you start

You will copy and paste a few commands. That cannot be avoided: Firebase installs the backend only from a terminal. You never have to write code. Each command is in a dark box with a Copy button; paste it, press Enter, and compare what you see with the "You should see" line.

  • What a terminal is. On a Mac: open Terminal (Applications → Utilities). On Windows: open PowerShell from the Start menu. Commands run in a folder; cd folder-name moves into a folder.
  • Open a terminal in a folder. Mac: in Finder, right-click the folder → Services → New Terminal at Folder. Windows: in File Explorer, open the folder, click the address bar, type powershell, press Enter.
  • Keep a notes file for your project id, the API address and where you saved your keys. Never paste keys or passwords into a support message.

The parts and how they connect are on one picture in Architecture. What you will pay for is in Services and costs.

02Part 1 · Install the tools

  1. Node.js 22Download the "LTS" installer for version 22 from nodejs.org and run it.
  2. Firebase CLIIn a terminal:
    npm install -g firebase-tools
    On a Mac, if it says "permission denied", put sudo in front and enter your Mac password.
  3. FlutterFollow the official guide at docs.flutter.dev for your system, with Android Studio (and Xcode on a Mac for iOS).
  4. Check
    node --version
    firebase --version
    flutter --version
    You should see: v22.…, a Firebase CLI version of 14 or newer, and Flutter 3.41 or newer. Exact versions: Requirements.

03Part 2 · Create your Firebase project

All of this happens in your web browser. Google renames buttons now and then; if a label differs a little, look for the closest match.

  1. Create the projectOpen console.firebase.google.com with your Google account and create a new project. Pick any name. Google Analytics is not needed. Write down the project id it shows (for example my-tracker-1a2b3): you will need it many times.
  2. Switch to the Blaze planIn the project, open the plan or billing setting (bottom of the left menu) and upgrade to Blaze (pay as you go). It asks for a billing account. This is required: Cloud Functions, their schedules and calls to CoinGecko only run on Blaze. Then, in Google Cloud Billing, create a budget alert so you get an e-mail if spending passes an amount you choose.
  3. Turn on AuthenticationLeft menu → Build → Authentication → Get started. Under Sign-in method, enable Anonymous. (Google, Apple and e-mail are optional; you can add them later.)
  4. Create the databaseLeft menu → Build → Firestore Database → Create database. Choose a location near your users (it cannot be changed later) and continue. The security rules it suggests do not matter: the next part replaces them with the package's rules.

You should see: the Firestore page with an empty database, and "Anonymous" enabled in Authentication.

04Part 3 · Put the backend online

  1. Open a terminal in the source/firebase folderof the download.
  2. Sign in to Firebase
    firebase login
    A browser window opens; choose the same Google account. You should see: "Success! Logged in as …".
  3. Choose your project
    firebase use --add
    Pick your project from the list with the arrow keys and Enter, then type default as the alias.
  4. Install the backend's packages
    cd functions
    npm ci
    cd ..
    This takes a minute or two. Warnings are normal; it should end without "ERR!".
  5. Deploy
    firebase deploy --only firestore:rules,firestore:indexes,functions
    If it asks to enable an API (Cloud Functions, Cloud Build, Cloud Scheduler, Artifact Registry), answer yes. The first deploy can take 5 to 10 minutes. You should see: "Deploy complete!".
  6. Test it in your browserOpen this address, with your project id:
    https://us-central1-<your-project-id>.cloudfunctions.net/api/v1/health
    You should see a short text that starts with {"ok":true. This address without /v1/health is your API address (API_BASE_URL); write it down.
If the deploy fails

The most common causes are the project not being on Blaze yet, or an API that still needs to be enabled; the message usually names it. See Troubleshooting.

05Part 4 · Create the console's key file (service account)

The operator console needs permission to write the app's settings into your database. Firebase gives that permission as a small key file.

  1. Download the keyFirebase console → the gear icon → Project settings → Service accounts tab → Generate new private key → confirm. A .json file downloads.
  2. Store it safelyMove it to a folder outside the download, for example Documents/keys/my-tracker-service-account.json. Anyone with this file can read and change your whole database: never e-mail it, never put it in the app, never upload it to git.
  3. Note its full pathMac: right-click the file while holding Option → Copy as Pathname. Windows: Shift + right-click → Copy as path (remove the quotes).

This file has the permissions it needs as Firebase creates it. If you later run the console on Google Cloud Run without a key file, see Service account and permissions.

06Part 5 · Start the operator console

  1. Open a terminal in source/adminand install its packages:
    npm ci
  2. Make a secret key
    node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
    You should see a line of 64 letters and digits. This key encrypts the API keys you will store in the console. Save it in your password manager: without it, stored keys cannot be read.
  3. Create the settings fileCopy .env.example in the admin folder to a new file named .env (Mac: cp .env.example .env; Windows: copy .env.example .env). Open .env in a text editor and fill in two lines:
    ADMIN_SECRET_KEY=<the 64 characters from the step above>
    GOOGLE_APPLICATION_CREDENTIALS=<the full path to your key file>
    Leave the other lines as they are. Save.
  4. Start it
    npm start
    You should see a setup code (four groups of four characters) and the line [admin] Cryptocurrency Tracker console http://localhost:8790/admin. Also look for [admin] config/public + config/private v1 written: that means the console reached your database. If you see config sync failed instead, read the message and go to Service account and permissions. Keep this terminal open while you use the console.
  5. Create your owner accountOpen http://localhost:8790/admin in your browser. Enter the setup code, your e-mail and a password of at least 12 characters.
    The console's Create the owner form with fields for the setup code, e-mail, password and repeat password
    Create the owner · first start only

07Part 6 · First settings in the console

  1. Get startedThe console opens a short checklist: the product name shown in the app, your accent colour and a support e-mail. Press Finish setup when done.
    The console's Get started page with product name, accent colour and support e-mail, a Blockers list and a Finish setup button
    Get started · local console with sample data
  2. LegalLeft menu → Legal: enter the web addresses of your privacy policy and terms. The stores require them.
  3. Data providersCreate a free Demo key at CoinGecko, then Left menu → Data providers: set the CoinGecko plan to Demo, paste the key and press Test. You should see "CoinGecko accepted the demo key (/ping)."
  4. Check StatusLeft menu → Status. "Firestore is reachable" and "App config written to Firestore" must be green. Anything marked as a blocker tells you what is still missing.
    The console Status page listing checks for CoinGecko, CoinMarketCap, AI, news feeds, RPC, legal URLs, Firestore and the app config
    Status · public demo console (sample data, so Firestore shows "not measured")
  5. Leave money settings for laterAds, Pro, affiliates and sponsored slots are off. Switch them on once the app works (How the app earns).

Every page of the console is described in Operator console.

08Part 7 · Build the app and open it on your phone

  1. Choose your app's ids firstPick your Android application id and iOS bundle id, for example com.yourname.coinwatch, and set them as in Rebranding. Do this now: it cannot be changed after the first store upload.
  2. Connect the app to your Firebase projectIn a terminal in source/app:
    dart pub global activate flutterfire_cli
    flutterfire configure --project=<your-project-id>
    Choose android and ios with the space bar, then Enter. You should see that it wrote lib/firebase_options.dart.
  3. Run it on a phoneConnect an Android phone with USB debugging on (or start an emulator from Android Studio), then:
    flutter pub get
    flutter run --dart-define=API_BASE_URL=https://us-central1-<your-project-id>.cloudfunctions.net/api
    You should see the onboarding, then live markets. If you see "Set your API address" or "Connect your Firebase project", one of the two steps above is missing.
  4. Change something in the consoleFor example the accent colour under Brand. Close the app completely and open it again: the new colour appears (the app loads its settings when it starts; allow up to a minute).

09Part 8 · Go live

  1. Put the console onlineSo you can reach it from anywhere, host it on a Node 22 server or container with HTTPS. Copy .env and the key file there, and back up the data/ folder and your ADMIN_SECRET_KEY. See Deploy options.
  2. Make it yoursName under the icon, icon and colours: Rebranding.
  3. Release buildsSigning, the Google Play bundle and the App Store build: Release. Before you publish with ads, replace the AdMob test app id (Ads).
  4. Push on iPhoneUpload your APNs key to Firebase: APNs key.

Stuck? Troubleshooting lists symptoms with their causes and fixes, and Support says how to reach us.