CodingPixel
A proposal for Bill Swartz and the Speech Committee

Let's get every student to the microphone

We take your Google Forms, Sheets and Apps Script prototype for the Rotary District 5170 Youth Speech Contest, harden it, install it, test it hard and hand it to your committee. It stays on free Google tools, so running it costs $0 a year.

Effort
80 to 100 hours
Price
$6,000fixed price
Handover
By Nov 2if we start Oct 12
Support
30 daysafter launch

Clients who trusted us, in their own words

Two projects we delivered that are close to this one. Both clients recorded a video review for us.

  • Top Rated on Upwork
  • $2M+ delivered
  • 2 video reviews below
Closest match

RaiseForward

Built for Moolah Fundraising

A custom fundraising platform that replaced PledgeDrive. It has roster upload with admin approval, online payments through Stripe, role-based access and reporting for each organization. That is the same shape as your registration, approval and tracking workflow. It is a custom React and Node.js build rather than Apps Script, and we still maintain it.

What we reviewed

We read your developer brief, the Apps Script code (about 750 lines), the landing page, the test guide and the setup guide. The prototype is well organised and matches the brief closely, so we are comfortable taking it to production.

The brief says the prototype has been checked with simulated data but not run end to end in a live Google account. We have read the code and have not run it. Our first step is a full live run in your test account. If that turns up work beyond this proposal, we tell you before spending the time.

Our first guess in chat was 30 to 40 hours. After reading Section 9 the job is bigger than hardening: 14 launch-blocking items, two installs, browser testing, a handover call and 30 days of support. The estimate also includes our QA engineer's independent testing, which you asked for. That is why it is now 80 to 100 hours across the team.

What you get

This follows Section 8 of your brief.

  • The prototype reviewed, defects fixed and error handling hardened, with every Must item in Section 9 resolved.
  • Everything installed in the test account, with your full test checklist run.
  • Everything installed in the contest account, including the club list's Public tab.
  • The landing page installed on DACdb with images uploaded, checked on iPhone, Android, Chrome, Safari and Edge.
  • The old Oakland form retired.
  • A recorded 45-minute handover call with the Speech Committee and a one-page how-to for the four routine tasks.
  • 30 days of bug-fix support after launch.

Timeline

Assumes we start the week of Oct 12. If the start moves, the dates move by the same amount.

Run the prototype live in your test account and fix what turns up

Build the 14 Must items and our additions

Independent QA: volume, email limit and device testing

Production install, DACdb page and browser checks

Handover call and one-page how-to (target Fri Oct 30)

Buffer before your early-November outreach push

30 days of bug-fix support, counted from launch

Your target: live before the school outreach push in early November.

Who does the work

We are an agency. Our development team is based in Pakistan, so your morning (Pacific) is our evening.

Abdullah Ali

Tech Lead and Architect

Builds the system and owns the technical decisions.

Qasim Fazal

QA Engineer

Tests independently of the builder, with the volume and edge-case runs you asked for.

Abu

Client Success Manager

Takes your calls and is your point of contact through launch and support.

Your Section 9 edge cases, and how we will handle each

14 Must items block launch. 7 Should items are wanted. 2 are already handled. Where we suggest a change to your list, it is marked.

MustShouldAlready handledOur refinement

Email delivery

  • E1

    Daily email limit is reached

    MustOur refinement

    Before each send, the script checks how many emails are left for the day. What does not fit is queued and goes out the next morning, parent consent emails first. The row shows "Email queued", and one failed email never stops the others.

  • E2

    School email blocks outside mail

    Should

    The form asks for a personal email, and known school domains are flagged.

  • E3

    Parent email typo that still looks valid

    Must

    A "Confirm parent email" field must match. We also scan the contest inbox for bounced mail and flag the row.

  • E4

    Contest account flagged as spam or locked

    Should

    A warm-up and send-volume plan before launch, and advice on Google Workspace for Nonprofits if it is needed.

  • E5

    Script failures go unnoticed

    Must

    Any failure sends the committee a clear alert and is logged on a visible "Errors" tab.

Registration data

  • R1

    Duplicate registration

    Must

    A likely duplicate (same student name and parent email, or same student email) is marked and the second parent email is skipped. The committee resolves it.

  • R2

    Siblings with the same parent

    Should

    Each child already gets their own row, code and link. The email and form will name the child prominently and say each child needs their own signature.

  • R3

    Two submissions at the same moment

    Must

    A nightly check makes sure every form response has a Tracker row. Missing rows are created or flagged.

  • R4

    A form question is renamed

    MustOur refinement

    We match questions by their internal ID instead of their title, so a rename cannot break anything. If a question goes missing, the committee gets an alert that names it.

  • R5

    Student withdraws

    Should

    A "Withdrawn" status stops all emails for that row.

Permission and signature

  • P1

    Parent email matches the student email

    Must

    The row is flagged for committee review. Registration is not blocked.

  • P2

    Parent signs within minutes of registration

    Should

    Flagged for review, since the student may have signed for the parent.

  • P3

    Student claims to be 18 or older to skip the parent step

    MustOur refinement

    We check date of birth against the club's contest date, or the latest club contest date if the student is not placed yet. We ask for date of birth only from students who say they are 18 or older, so we collect less data from minors with the same protection.

  • P4

    Parent edits the pre-filled code or forwards the link

    Already handled

    No change. Unknown codes alert the committee. Anyone with the link can sign, which is an accepted risk.

  • P5

    Parent does not read English

    Should

    A Spanish version of the parent email and permission form, priced separately (see Price and terms).

Committee spreadsheet use

  • S1

    Placed is filled down several rows

    Must

    Every row in a multi-row edit is processed, or the edit is blocked with a visible note.

  • S2

    Club changed on a row that is already Placed

    Must

    The student, the new chair and the old chair are all emailed.

  • S3

    A column is inserted or moved in the Tracker

    Must

    Columns are found by header name, and the header row is protected.

  • S4

    A Tracker tab or form is renamed or deleted

    Should

    Key tabs are protected, and the script fails with a clear message.

Club list and landing page

  • C1

    A club set to Yes shows on the page before it is on the form

    Must

    The form's club dropdown refreshes whenever the club sheet changes. If a club is not on the form yet, the page falls back gracefully.

  • C2

    Club names with apostrophes, ampersands or extra spaces

    Must

    Names are encoded and trimmed the same way everywhere, and tested with names like these.

  • C3

    Chair email is blank, or has several addresses

    Must

    Several addresses separated by commas or semicolons all work. Blank or invalid chair emails are flagged to the committee.

  • C4

    The published club list fails to load

    Already handled

    No change. The page shows a message and Register still works.

Beyond your list

What we would change in your list, and what we found that it does not cover.

Changes to your list

  • Age check (P3). Ask for date of birth only from students who say they are 18 or older.
  • Renamed questions (R4). Match by question ID, plus an alert.
  • Email limit (E1). Parent consent emails go first in the queue.
  • Placement emails. Setting a student to Placed emails the student and parent at once, and a mis-click cannot be unsent. We add a simple safeguard before those emails go out.

Additions

  • A club drops out after students were placed with it. Your brief says this happens, and nothing flags those students today. We add an alert and a re-placement list.
  • Daily summary on quiet days. Today the script emails the committee only when someone registered in the last 24 hours, so a quiet week such as January would get nothing. We send it whenever students are still waiting.
  • Pacific time. The script's clock is set to Pacific so "8 AM" means 8 AM.
  • Complete cleanup. After the District Final, the raw form responses are deleted as well as the Tracker rows.
  • Account safety. Everything lives in one Gmail account, so we set up a backup admin and recovery options. The setup guide assumes the district qualifies for free Google Workspace for Nonprofits, which has a higher email limit. That needs confirming.

How we will prove it works

You asked for testing with a meaningful amount of data, by someone other than the developer.

  • All 24 acceptance tests in your brief pass in the contest account with test students, then are cleaned up: 13 core tests and 11 additional ones.
  • Volume runs: 10 registrations inside one minute, a 30-registration day, and an email-limit exhaustion test in the test account.
  • Device and browser checks on iPhone, Android, Chrome, Safari and Edge, with no sideways scrolling at 390 px wide.
  • Our QA engineer runs these tests separately from the person who built the system.

Price and terms

Estimated effort80 to 100 hours
Price$6,000 fixed price
IncludedEverything under "What you get", plus 30 days of support

Changes and add-ons

  • Any change in scope is discussed and agreed with you before work starts, as your brief says.
  • Spanish parent email and permission form (P5): priced separately.
  • Support through the February and March contest season, beyond the 30 days: priced separately.

Out of scope

  • A custom-coded site outside DACdb
  • Paid e-signature tools
  • SMS
  • Judging and scoring tools
  • Payment of prizes

Questions that affect the quote

Reply in our Upwork chat or bring them to the call.

  • How many registrations do you expect in total, and how many did you get last year?
  • Do you want the parent email and form in Spanish?
  • Is the contest account a free Gmail account, or already Google Workspace?
  • Do you want support through the February and March contest season?

What we need from you after you hire us

  • Access to the test account and the contest account. We set this up with you by invite or on a short screen-share. We never ask for passwords in chat.
  • The real club list spreadsheet and the existing Oakland registration form.
  • DACdb page-edit access and image upload, and the name of the person at the district who can grant it.
  • Your answers to the open decisions in Section 10: the rules link, the placement date, final prize figures, the public contact email and whether the district licenses the Europa font.

Next steps

  1. You read this and tell us what to change.
  2. We send a meeting request through Upwork so you can pick a time. Abu takes the call.
  3. We confirm the price and scope with you.
  4. We start with the live run in your test account.