This project gives you a private writing environment with:
- sign-in (Google + Email/Password)
- saved drafts in Firestore
- a simple allowlist so only specific emails can enter
Typer Tool gives you a minimalist, distraction-free environment that you can access from any device with an internet connection: a smartphone, tablet, laptop, desktop, or a work terminal that has a browser.
If you are not a tech user, skip the 10-minute quickstart and follow the step-by-step procedure below.
How this setup works: You will fork Typer Tool into your own GitHub account, configure Firebase in your browser, edit two small config files on GitHub (no IDE and no downloads required), turn on GitHub Pages for a live website URL, and test Typer in your browser. Everything happens in GitHub and Firebase — not on your computer’s file system.
You are creating a website page where:
- A user signs in.
- Allowed users can open the writing desk.
- The app auto-saves writing to that user's Firestore path.
Your live site will be hosted at a URL like:
https://<your-github-username>.github.io/typer-tool/
If you are a tech user and familiar with GitHub and Firebase, follow these steps:
- GitHub: Create an account → open
https://github.com/<author-user>/typer-tool→ Fork → Create fork. - Firebase: Create project → add Web app → copy all 6 config values → enable Google + Email/Password auth → add authorized domain
yourusername.github.io→ create Firestore (Standard, production mode) → paste rules fromfirebase/firestore.ruleson your fork → Publish. - Configure fork (on GitHub): Edit
src/scripts/firebaseConfig.js→ paste Firebase values → Commit changes. Editsrc/scripts/authorization.js→ your email(s) → Commit changes. - GitHub Pages: Repo Settings → Pages → branch
main, folder/src→ Save → wait 1–5 minutes for deploy URL. - Test: Open your live URL → sign in → New → title → type → Save → confirm doc in Firestore Data tab at
typerDrafts/{uid}/files/{docId}.
If you get stuck, use the full step-by-step guide below.
You will work from your own fork of the starter repo. That way your Firebase settings, allowlist, and live website all belong to your GitHub account.
- If you do not have a GitHub account yet, go to GitHub and sign up, then return here.
- Open the Typer Tool starter repository (the link you were given):
https://github.com/<author-user>/typer-tool - Click Fork (top right) → Create fork.
- When GitHub finishes, you should be on
https://github.com/<your-github-username>/typer-tool— that is your fork. Bookmark this page; you will edit files here and turn on your live site from here.
You do not need to download the project to your computer for this guide.
Do this in Firebase Console. You can use the same Google account you used for GitHub, or a different one.
- Open Firebase Console.
- Click Create a project.
- Enter a project name and continue through the prompts.
- After project creation, click the gear icon (Project settings).
- In General → Your apps, click the Web icon (
</>) to create a Web app. - Register the app (nickname can be anything, example:
typer-web). - Firebase shows your web app config. Copy this entire block and keep it somewhere handy (you will paste it in step 3). You need all six:
apiKey: <Firebase value>authDomain: <Firebase value>projectId: <Firebase value>storageBucket: <Firebase value>messagingSenderId: <Firebase value>appId: <Firebase value>
Important:
- These values are safe to put in frontend code.
- If you leave even one
PASTE_*placeholder in the project, the app will show "Firebase not configured."
In Firebase Console:
- Go to Security → Authentication.
- Click Get started.
- Open the Sign-in method tab.
- Enable:
- Email/Password
Google:
- Enable the provider.
- Choose a support email.
Email/Password:
- Enable the Email/Password provider.
Apple note:
- Official Apple Sign In usually requires an Apple Developer account (about
$100/year). - To avoid that, users can still use Apple-hosted email addresses with Email/Password sign-in.
Authorized domains:
- In Authentication, open the Settings tab.
- Under Authorized domains, add:
your-github-username.github.io(use your real GitHub username — this matches your GitHub Pages site)- Example: if your username is
janedoe, addjanedoe.github.io
You do not need localhost for this guide unless you later add optional local preview on your computer.
In Firebase Console:
- Go to Databases & Storage → Firestore.
- Click Create database.
- Choose Standard edition.
- For Database ID and location, use the default populated values unless you have a specific reason to change them.
- Choose Start in production mode.
- Click Create / Enable.
Now set rules:
- On your fork on GitHub, open
firebase/firestore.rules(browse the file — do not download the repo). - Click the file name to view it, then click the raw button or select all text and copy the full rules contents.
- In Firebase Console, open Firestore Rules tab.
- Paste the copied rules into the editor (replace what is there).
- Click Publish.
Rules behavior:
- Drafts are saved under
typerDrafts/{uid}/files/{docId}. - Only the signed-in user with that
uidcan read/write that path.
All file edits in this section happen on github.com in your fork. You never need to install an editor on your computer.
- On your fork (
https://github.com/<your-github-username>/typer-tool), browse to the file (example:src/scripts/firebaseConfig.js). - Click the pencil (Edit) icon near the top right of the file view.
- Make your changes in the browser editor.
- Scroll down, enter a short commit message (example:
Add Firebase config). - Click Commit changes.
Your changes are saved to your fork on GitHub immediately. No terminal, no git install, and no “push” step from your laptop.
After you turn on GitHub Pages (section 4), each commit also triggers a new deploy of your live site (usually within a few minutes).
- On your fork, open
src/scripts/firebaseConfig.js. - Click the pencil (Edit) icon.
- Before you edit: keep the same indentation as the original file — each line should stay lined up inside the
{ ... }block. Only change the values inside the quotes.
- Before you edit: keep the same indentation as the original file — each line should stay lined up inside the
- Replace the placeholder block with the real values you copied from Firebase in section 2.1, step 7:
apiKey: <your Firebase value>authDomain: <your Firebase value>projectId: <your Firebase value>storageBucket: <your Firebase value>messagingSenderId: <your Firebase value>appId: <your Firebase value>
- Scroll down → commit message (example:
Configure Firebase) → Commit changes.
- On your fork, open
src/scripts/authorization.js. - Click the pencil (Edit) icon.
- Replace the sample emails in
allowedEmailswith real email addresses you want to allow:
export const allowedEmails = [
"you@example.com",
"collaborator@example.com"
];- Remove all dummy/sample emails. Keep only real accounts you want to allow.
- Scroll down → commit message (example:
Set allowlist) → Commit changes.
Important:
- This allowlist is website-level UX gating.
- Firestore rules are still the actual security layer.
This publishes your fork as a real website you can open on any device.
- Your fork should already include the Firebase and allowlist commits from section 3.
- Use a Public fork/repo for the simplest GitHub Pages path.
- This project publishes from the
/srcfolder (that is expected).
- Open your fork on GitHub (
https://github.com/<your-github-username>/typer-tool). - Click the Settings tab (top of the repo page).
- In the left sidebar, click Pages.
- Under Build and deployment:
- Source: choose Deploy from a branch
- Branch: choose
main - Folder: choose
/src
- Click Save.
- GitHub starts building your Pages site.
- Wait 1–5 minutes (sometimes longer on the first deploy).
- Refresh the Pages settings screen until you see a live URL.
- Your site URL will look like:
https://<your-github-username>.github.io/typer-tool/
If you have not already (section 2.2), open Firebase Console → Authentication → Settings → Authorized domains and confirm your-github-username.github.io is listed. Sign-in will fail on your live site if this domain is missing.
You do not need to manually create Firestore collections or documents first.
The app creates them automatically the first time a signed-in allowlisted user:
- opens your live Typer site
- clicks New
- enters a document title
- saves or autosaves
At that point, Firestore will automatically get:
typerDrafts/{uid}/files/{docId}
with fields:
content(string)updatedAt(server timestamp)
Now that sections 2, 3, and 4 are complete:
- Open your live GitHub Pages URL (not localhost):
https://<your-github-username>.github.io/typer-tool/
- If you just committed changes, wait a few minutes and hard-refresh the page.
- Sign in with an allowlisted account (an email you put in
authorization.js). - Click New, enter a title, and confirm.
- Start typing in the new document.
- Click Save once.
- In Firebase Console → Firestore Data tab, confirm the document appears under
typerDrafts/{uid}/files/{docId}.
If all of these steps work, your setup is complete.
If you do not see data in Firestore:
- Firestore rules may not have been published — re-paste
firebase/firestore.rulesand publish again. - The signed-in email may not be in
allowedEmailson your fork (checkauthorization.jsand commit again if needed).
This section explains the normal day-to-day workflow once setup is complete.
When you first enter the desk, typing by itself does not create a file yet.
You must:
- Click New
- Enter a title
- Confirm
- You will then see that title appear above the keyboard/typing area.
- Start writing in your new document.
After this, the app creates your Firestore document and your writing can be saved.
- Manual save: click Save anytime.
- Auto save: runs periodically while you work (about every 60 seconds).
- Open existing docs: click Open and choose a title from your list.
- Read: opens a clean reading view of the current document.
- Focus: dims the interface and enters fullscreen for distraction-free writing.
- Pomodoro: available from the toolbar.
There is no delete button inside the Typer desk UI by design.
This is intentional so users cannot accidentally remove writing with one click. Deleting requires deliberate steps in Firebase:
- Open Firebase Console.
- Go to Firestore Database.
- Open Data tab.
- Open
typerDrafts. - Open your user document (UID-looking name).
- Open
files. - Find the document you want to remove.
- Click the three dots menu for that document.
- Click Delete and confirm.
If you are unsure, back up/copy the text before deleting.
To update Firebase config, allowlist, or any project file after you are live:
- Open the file on your fork on GitHub.
- Click Edit → make changes → Commit changes.
- Wait a few minutes for GitHub Pages to redeploy.
- Hard-refresh your live site and test again.
You still do not need to download anything to your computer for normal updates.
- You forked Typer Tool to your own GitHub account
-
src/scripts/firebaseConfig.json your fork has noPASTE_*values -
allowedEmailsinauthorization.jshas real emails only - GitHub Pages is enabled (
mainbranch,/srcfolder) -
your-github-username.github.iois in Firebase Authorized domains - Firestore rules from
firebase/firestore.rulesare published - Google sign-in works on your live URL
- Email/password registration works
- Email/password sign-in works
- Non-allowlisted users are blocked
- Allowlisted users can open the desk
- New/Open/Save works on your live URL
- Firestore shows docs at
typerDrafts/{uid}/files/{docId}
- One or more
PASTE_*values still exist infirebaseConfig.json your fork. - Edit the file on GitHub, commit, wait for Pages to redeploy, and hard-refresh.
- Confirm you committed on your fork, not the original starter repo.
- GitHub Pages deploys usually take 1–5 minutes after a commit.
- Check your repo Actions tab for a failed Pages build.
- Hard-refresh the browser (or try a private/incognito window).
- Firestore rules were not published.
- Or rules were edited incorrectly.
- Re-copy
firebase/firestore.rulesfrom your fork, paste in Firebase Rules, and Publish.
- Add
your-github-username.github.ioin Firebase → Authentication → Settings → Authorized domains.
- Browser blocked popups; allow popups for your live site URL.
- Signed-in email is not listed in
authorization.json your fork. - Edit the file on GitHub, commit, wait for redeploy, and try again.
- Confirm Pages is set to
main+/src(not root/). - Confirm the repo is Public (simplest path) or that your GitHub plan supports Pages for private repos.
- Wait a few more minutes and refresh the Pages settings screen.
- Frontend allowlist alone is not enough security.
- Keep Firestore rules strict.
- Test with a second account to confirm blocked access works.
This is not required for the setup above. Only use this if you want to run Typer at http://localhost:8000/ before or alongside your live GitHub Pages site.
You will need to download your fork, install Python 3, and run pip install -r requirements-dev.txt and python devserver.py from the project root. If you use local preview, also add localhost to Firebase Authorized domains.
See the original README.md in this repository for the full local-setup instructions.
I build and maintain this project as an independent developer.
If this tool has been useful to you and you'd like to support future improvements, you can do so here:
Thank you for trying the app. I hope it helps you create something meaningful.


