Prototype — sample content, and the mascot is a rough placeholder cut from a flyer. Event details, volunteer signups and photos of people open once someone signs in and the board says yes (in this demo, approve yourself under Admin → Families). Everything else is edited in Admin.
Friends of DSI
Admin

Board sign-in

Only board members can edit. Sign in with the Google account the board added for you — no new password.

Board members only. You’ll be asked which Google account to use.

Signed in · board

Time for a backup

Access tab, Keeping the data safe, then Download everything. It takes a few seconds. Keep the file in the board's Drive, not in somebody's downloads folder.

Newsletter list
0
Unread messages
0
Shifts open
0
Board seats open
0
Upcoming events
0

Draft the newsletter

This site does not send email. Write the opening line, press Build, and paste the draft into Zeffy. The monthly habit is under Runbook → Monthly.

Open Zeffy

How the site is doing

These open the visit counts. If a report looks empty, or Google asks you to start measuring, read Runbook → Reading the numbers before you change anything.

Open the Analytics dashboard Open Google Analytics Add or remove who can see it

How close we are to the free limit

This opens Firebase’s count of database reads, writes, and deletes for the day. Compare the reads with 50,000. People opening pages with pictures stored on this site are what push that number up. The page does not show the monthly 10 GB of downloads. Only the shared Google account that owns the Firebase project can open it. Signing in here as a board member is not enough. If it says you do not have permission, switch to that Google account.

Check today’s database usage

What this site does not know

Paid members, RSVPs, volunteer names, and the newsletter list are not stored here. Where each one lives is under Runbook → Where the lists live.

New post

This is not the calendar. Say what already happened. A date goes under Events. See Runbook → Posting news and events.

To make words a link, write [the words](https://the-address). A pasted address becomes a link on its own.

Picture

Optional. One photo from the thing you are writing about. A post without one reads exactly as it does now.

Event photo albums

Every event can carry its own album link, a cover picture for its card on the Photos page, and its own pictures and clips. They open for people the board has approved — sign-in is the lock. Before anything goes up, check it against the school’s opt-out list.

Every album you paste here · Collaborate must be OFF

Check the setting in Google Photos before you paste the link, and again whenever an album changes hands. If Collaborate is on, any parent can drop a photo straight in front of every family and no one checks the opt-out list first. The website cannot detect that or prevent it, because the photo never passes through the site.

The one album that keeps Collaborate on is the submissions inbox, and it is set up under Community, never here.

New event

To make words a link, write [the words](https://the-address). A pasted address becomes a link on its own.

New volunteer shift

Always give a real length. "Help needed" does not fill; "1 hour, 4:45 PM" does.

Board seats

The recruiting block on the site is built from this list and vanishes entirely once every seat is filled.

Shared placeholder

Shown for any member who has not sent a photo yet. Remove it and the page falls back to their initial instead.

Photo

Optional. A head-and-shoulders picture, square if you can. Without one the page shows their initial, which looks fine.

What Friends of DSI does

Shown on the About us page. Rewrite it whenever the board's focus changes.

Where the money goes

One list, shown in two places: the About us page, and "What it pays for" on the Give page.

What membership gets you

Shown on the Membership page. The vote and the thank-you gift are fixed, above whatever you add here — those come from Settings and the Text tab.

Page headings and intros

Plain text only — no bold, no links, no HTML. The length limits are there so each heading and intro still fits its layout on a phone.

Photo albums

Published albums stay view-only

Approved families can open a published album. Collaborate must be off. The submissions album is the only one parents can add to, and that link must never go on a public page. Google Photos does not ask the board first. The steps are under Runbook → Photos.

Adding a published album, start to finish
  1. Open Google Photos signed in as the foDSI account and make the album.
  2. Check Collaborate is off. Do this before anything else.
  3. Open it → Share → Create link → Copy. Leave it link-only, never “anyone can find this”.
  4. If it belongs to an event, paste it into that event under Events. If it does not, add it below.
  5. Upload a cover picture. A Google Photos link cannot be shown as a picture, so without one the card has nothing to show.

Setting up the submissions inbox instead? Same steps, except Collaborate goes on at step 2, and its link goes in the box below rather than on an event. It is the only album on this site that works that way, and you only make it once.

Parents see this number under the Submit button. The sentence is under Text → Photos. It uses {max} so the number stays in step with this box. Why the site cannot cap the upload itself is under Runbook → Photos.

Albums that are not an event

An event album goes on the event, under Events. Everything else goes here. These cards sit with the event albums on the Photos page, grouped by school year.

Cover picture

A Google Photos link is not a picture. Upload a cover or the card is blank.

Covers and tiles uploaded here use the opt-out tick. Album links do not pass through this site. See Runbook → Photos.

The opt-out list

Children whose families said no to photos. Check this before you publish. The rules are under Runbook → The opt-out list.

Board only · never shown to families · never on the public site

Only signed-in board members can read this. The school’s list is the real one. When they update it, update this the same day.

Front-page photos — public

Public. Anyone can see these, including Google. Use a shot you would print on a flyer. A child’s face goes in a published album. Four pictures max.

Picture

Choose a photo from your computer, or paste a link if it already lives somewhere.

Parent voices

Shown on the home page, in this order. Hide any you do not want up. Use real quotes, with permission.

What the store sells

Shown on the home page. Add a photo when you have one. People still order on Zeffy.

Picture

The product, photographed plainly. Your browser shrinks it before anything is saved.

Documents

Bylaws, minutes, the budget. Keep the files in Drive and link them here — published openly is the norm, and it is what makes a parent organisation look trustworthy.

Frequently asked

To make words a link, write [the words](https://the-address). A pasted address becomes a link on its own.

Keeping the data safe

Download a file every month and put it in the board Drive. What is in the file, and how restore works, is under Runbook → Backups and who can sign in.

What is in that file

The download holds children’s names, family email addresses and the opt-out list. Treat it like the school’s own records rather than something left sitting in a downloads folder or emailed around.

Replace everything with the file? Every page, every family, every setting becomes what the file says. Download a copy first if you are not sure.

Bring back an older version

Every save keeps the previous copy of the part that changed. Bringing one back is explained under Runbook → Backups and who can sign in.

Restore this version? Whatever that part of the site holds right now gets replaced — but it is archived first, so this itself can be undone the same way.

Who did what

Every approval, removal, deletion and settings change, newest first. Nobody can edit this list.

Who can sign in

New people come in as editors and sign in with their own Google account. Owners can also change this list. The handover rule is under Runbook → Backups and who can sign in.

Use a Gmail address. This form cannot make an owner. The site cannot tell if that Google account exists. Have them sign in once before you rely on it.

Two owners, always

One seat is the Friends of DSI account, not a person. An owner hands their seat to an editor from their own row. The count does not change. The reason is under Runbook → Backups and who can sign in.

Starting from nothing?

The site is empty. Load the sample to see the pages, then replace it. The photos and parent quotes are fake.

Announcement

One line at the top of every page. Use it for something people need today. Leave it off the rest of the time.

If a visitor closes it, it stays closed for them until you change the words.

Organisation

Name, address, and contact email used across the site.

These are the choices a family picks from on the request form. Separate them with commas, in the order they should appear.

Approved staff see the same event details, volunteer signups and photos as an approved family. The board still reads every request by hand. This only decides whether staff are offered the option at all.

Links

Album links are not here — they live under Community, and only people the board has approved ever see them.

Only promise a rhythm here if the board will keep it. “One email a month” is a commitment; “Get the newsletter” is not.

Brand

The browser shrinks the file before it is saved. Keep each under 220 KB. Why is under Runbook → Uploading pictures.

Site logo

The thunderbird is already in the top bar. Replace it only if you want a different mark. A square image works best.

Mascot

Shows beside the announcement, not on the home page. A PNG with a transparent background works best.

What this site is made of

Everything here runs inside Google’s free allowances and stays free at this school’s size. No card is on file and no billing account is attached. The project is on Google’s free Spark plan, which cannot charge anything: if the site ever outgrew an allowance it would stop serving rather than bill anyone. Attaching billing is a deliberate decision for a future board, not something that can happen by accident.

PieceServiceCostWhy
HostingFirebase Hosting (Spark)$010 GB, free SSL, custom domain.
Sign-inFirebase Authentication$0Google Sign-In for people at DSI and the board alike. No passwords anywhere.
The doorFirestore (requests, members) + rules$0Someone asks once; a board member says yes under Families; the rules do the rest.
ContentCloud Firestore$0Every tab above. 50,000 reads a day, 10 GB of downloads a month, 1 GB stored. Pictures stored on this site count. See Uploading pictures.
PhotosGoogle Photos albums + pictures inside the site$0One album per event, plus any standing on their own, and the pictures kept inside the site. All of it reaches approved people only. Larger sets go to Cloud Storage (5 GB free in us-central1) once billing is attached.
DonationsZeffy$0No platform or processing fee.
NewsletterZeffy$0Same account as dues and donations. One less thing to hand over.

Almost nothing on the public site is hardcoded. Pages, links, contact details, the board, the money lines, the FAQ, and the standing wording on every page (the Text tab) come from these tabs. A future board does not need a developer to keep the site correct. A developer is only needed to change how it looks.

The one rule that matters: a dedicated Friends of DSI Google account owns all of it — Firebase, every photo album, Zeffy, the domain. Never a personal account. Handover is one password to the next board.

Where the lists live

The public site does not keep who paid, who is coming, or who is on the newsletter.

  • Dues, the newsletter list, and the voting roll are in Zeffy.
  • Ticket sales are in Zeffy. RSVPs for free events are on Facebook.
  • Names for a volunteer shift are on that shift’s signup link. This site only shows that the shift is open.

Photos of children stay behind sign-in. A public page has no list of children on it. You can show that page to a helper without handing them those names.

Reading the numbers

The Dashboard has two buttons for the same visits. The Firebase button is the short look. Google Analytics is the full report.

If Google Analytics says welcome and asks you to start measuring, you are in the wrong Google account. Switch accounts. Do not press that button.

If a report is empty, turn off your ad blocker or open a private window before you decide the site is broken. Everyone else may still be counted.

On the Firebase dashboard, Active users in last 30 minutes is who is on the site right now. Boxes for app version and crash-free users say No data available, and they will say that here forever. Those boxes are for phone apps.

Page counts are under Reports, then Engagement, then Pages and screens. Button counts are under Events. The names are:

donate, join, volunteer, event_ticket, event_rsvp, photos_album, photos_submit, click_shop, click_document, announce_click, announce_dismiss, newsletter_signup

To let another person see the numbers, open the third Dashboard button. Add their Google account. Choose Assign Firebase role(s). Check only Analytics, then Viewer. That role does not show families or the database. Only an existing Owner of the shared Google project can add people. Right now that Owner is the board’s shared account. If a link says you do not have permission, you may be signed into the wrong Google account in this browser.

Posting news and events

An event is something that is going to happen. Add it under Events. News is what already happened, or something that was never on the calendar. Add it under News.

To make words a link, write [the words](https://the-address). A pasted address becomes a link on its own.

Photos

A published album is one that approved families can open. Make it in Google Photos under the Friends of DSI account. Turn Collaborate off before you share it. Copy the link. If the pictures belong to one event, paste the link on that event. If they do not, add the album under Community. Upload a cover here. A Google Photos link opens the album. It is not a picture. The card is blank without a cover.

The submissions album is the only album where Collaborate is on. The Submit button on the Photos page goes there. Nothing in that album is on the website. Families do not read it. You open it, check each face against the opt-out list, and copy the allowed photos into a published album. Never paste the submissions link on a page a family can open.

Google Photos shows a new photo to everyone who has the link as soon as it is added. This website never sees that photo. It cannot warn you and it cannot block it. Turn Collaborate on for a published album and that protection stops, with no message here.

Front-page tiles are public. Search engines can index them. Use a shot you would print on a flyer. A child’s face goes in a published album, not on the front page. Four tiles at most.

The number you ask each family for is the box under Community. The sentence parents read is under Text, then Photos. That sentence uses {max} so it stays the same number as the box.

The opt-out list

This is the children whose families said no to photographs. Only the board can read it. It is not on the public site. A normal save of events or news cannot put it there. The school’s own list is the one that counts. When the school updates theirs, update this one the same day. Check it before a photo goes on a public page or into a published album.

Backups and who can sign in

Nothing backs this site up for you. Once a month, download the file under Access and put it in the board Drive. The file contains family names, email addresses, and the opt-out list. Do not email it. Do not leave it in Downloads.

Restore replaces the whole site with that file. Download a fresh copy first if you are not sure. Every save also keeps the previous copy of the part that changed. You can bring that copy back. The current copy is saved first, so you can undo the undo.

A new person is an editor. They can change events, news, photos, and settings. They sign in with the Google account they already have. There is no separate password. The address has to be a Gmail address. @googlemail.com is the same mailbox. The site cannot tell if that account exists. Have them sign in once and watch their name appear before you rely on it.

An owner can do what an editor can do, and can change this list. There are always two owners. One seat is the Friends of DSI account, not a person. You do not promote someone into a seat and you do not delete a seat. An owner picks a named editor on their own row. That editor becomes an owner. The outgoing owner becomes an editor.

Settings a new person will not guess

The announcement is one line at the top of every page. Use it for a date that moved, a deadline, or a closure. Leave it off the rest of the time, or people stop reading it. If a visitor closes it, it stays closed for them until you change the words.

The thunderbird in the top bar is already the logo. Replace it only if you want a different mark. The mascot shows beside the announcement, not on the home page.

Grades are the choices on the family request form. Separate them with commas, in the order they should appear. Approved staff see the same event details, signups, and photos as an approved family. The board still reads each request. The checkbox only decides whether staff are offered the form.

The newsletter heading should not promise a schedule the board will not keep. “Get the newsletter” is a label. “One email a month” is a promise. If the site is empty, the sample fill is fake. The photos are placeholders and the parent quotes are made up. Replace them before you send anyone the link.

Monthly, by whoever holds the seat

  1. Post next month's events and any shifts that go with them.
  2. Send one newsletter from Zeffy. Build the draft on the Dashboard first so the dates are right. Announce shifts there — the site is where people look things up, not where they discover them.
  3. Write one short news post about what just happened. This is the part that makes Friends of DSI look alive.
  4. Move approved photos from the submissions album into whichever published album they belong to, checking the opt-out list first.
  5. Clear the inbox. Photo-removal requests get done the same day.
  6. Read the Zeffy total into the minutes and post the updated budget under Documents.

The shared calendar

Events are typed under Events. This site does not read them out of Google Calendar, and there is no API key to create.

Each event page has Add to calendar. That puts that one event on the reader’s own calendar.

Settings, then Links, also has two links for a shared calendar you keep yourself.

  1. In Google Calendar, under the Friends of DSI account, make a calendar called “Friends of DSI Events”.
  2. Settings, then Access permissions. Turn on Make available to public.
  3. Settings, then Integrate calendar. Copy the link that adds the calendar to Google Calendar. Copy the public ICS address for Apple Calendar and Outlook.
  4. Paste both under Settings → Links here.

Those links point at the Google Calendar, not at this website. Changing an event here does not change that calendar. If the shared calendar should match the site, add the event in both places. How people take part, the signup link, the flyer, and the longer description live only on the event in this admin.

Uploading pictures

There is a file picker for the logo, the mascot, the front-page tiles, and event flyers. The top bar already shows the thunderbird, so the logo can stay. The mascot shows beside the announcement, not on the home page. Choose a file and your browser shrinks it before anything is saved. A 4 MB phone photo comes out around 100 KB. Nothing large ever leaves your machine.

The reason for the shrinking is that these pictures are kept in the database next to the text. Paid file storage would need a billing account, and there is no card on file. The picker refuses a picture it cannot get under about 220 KB.

Every visit asks the database for the page, then for each picture stored on this site that the visitor is allowed to see. Coming back later does not skip that. The copy on their computer is used only when the database cannot be reached.

A stranger loads the public pictures, such as the mascot and the store photos. A signed-in family or a board member loads every picture stored on the site, including pictures that are not on the page they opened. A Google Photos album does not count. The site only keeps the link, and Google serves those pictures.

Two different limits apply.

The free allowance is 50,000 of those database reads a day, 10 GB of downloads a month, and 1 GB of stored data in total. A busy day of people opening pages with pictures stored here is what uses it up. Each of those pictures is one read and one download of its bytes, on every visit. If a daily limit is passed, that part of the site stops until the next day. If the monthly download is passed, it stops until the next month. Nobody is billed.

The day’s read count is in Firebase, not on this site. The Dashboard button “Check today’s database usage” opens it. Only the shared Google account that owns the project can see that page. It shows reads, writes, and deletes. It does not show the monthly download total.

The other limit is how many pictures you can save here. A save that would leave more than 60 different pictures stored on the site is refused. The pictures already saved stay where they are. Links to Google Photos do not count toward the 60. If the site is already over 60, the next save fails until that same save removes pictures down to 60. The front page has its own limit of four tiles.

What this is not for. This is not a photo album. Event photos belong in Google Photos, which does not spend this site's allowance.

If you would rather host an image elsewhere and paste a link, every picker still accepts a URL.

If you would rather host an image elsewhere

Every picker also accepts a link. A Google Drive file set to “anyone with the link”, used as https://drive.google.com/thumbnail?id=FILE_ID&sz=w1200, works and costs nothing — though Google has changed that URL shape before, so check the tiles once a term. For most boards the built-in picker is simpler and there is no reason to reach for this.

A Google Photos album link is not an image URL — it opens the album, it does not embed. The picture fields refuse one and say where it goes instead, and the admin lists flag any tile saved with one before that check existed. This is why every album card needs a cover picture uploaded here.

Posting a photo — the checklist

  • Is every child in it clear of the school's opt-out list? If you can't tell, don't post it.
  • No full name next to a face. First names only, or none.
  • Prefer group and activity shots over portraits of one child.
  • Nothing showing a home address, a car plate, or a badge number.
  • Phone uploads strip most location data — check anything that came off a camera.
The one thing on this site that cannot be undone

A published album must have Collaborate off. The submissions album is the only one with Collaborate on. Google Photos shows a new photo to everyone with the link immediately. This site cannot see that photo. The steps are under Photos, above. Check Collaborate again whenever an album link changes hands.

Email rules you're actually bound by

CAN-SPAM applies to nonprofits — there is no exemption. Every bulk send needs a real reply-to address, the physical mailing address from Settings, and a working unsubscribe honored within ten business days.

Build the list on this site. The school's parent directory belongs to the school — those families opted in to the school, not to Friends of DSI. The clean start: ask the school to send one announcement linking here, then own the list from there.

Where the code lives

The whole site is on GitHub at github.com/friendsofDSI/friendsofdsi-website. The GitHub account is the same fodsiboard@gmail.com organisation account that owns Firebase, every photo album and Zeffy, so handover stays one account rather than five. Sign in to GitHub with it the same way, through Google.

Nothing a board member does day to day needs GitHub at all. It matters for two things. It is the copy that survives if the Firebase project is ever lost, and it is what a future volunteer with coding experience would be pointed at.

Deploying a change

Day-to-day content never touches code. Code changes are rare:

  1. npm install -g firebase-tools, once.
  2. firebase login with the Friends of DSI Google account.
  3. firebase deploy --only hosting from the project folder.
  4. If firestore.rules changed, firebase deploy --only firestore:rules as well. Hosting deploys never publish rules, and a rule that stays unpublished fails silently.
  5. git push, so GitHub matches what is live.

Firebase keeps previous releases, so a bad deploy is one click to roll back.

Before the first real photo goes up

  • Get the school's opt-out list in writing, plus written permission to rely on the releases they already collect.
  • Confirm whether Friends of DSI is covered by the school's insurance or needs its own.
  • Confirm foDSI's own EIN and bank account are what Zeffy points at — never a personal account.

People at DSI

Sign in to see this