Two screens; add tasks; tasks display in a list until app is restarted.
Errors & solutions
flutter command not found: fix SDK PATH
No devices: start emulator or connect USB debugging
State resets on restart: expected; persistence requires local database
Practice assignment & self-check
Assignment: Extend the example with one realistic feature, test it, and record the result. Do not use production credentials or real client data.
Knowledge check: Explain the purpose of the main concept, demonstrate the expected output, and identify one likely failure and fix.
LESSON 03 · Advanced
Google Apps Script — Approval tracker automation
Objective: Create a safe, manual-run approval tracker in Google Sheets.
Theory: Apps Script can read spreadsheet rows in batches and update cells; manual runs avoid unexpected automated side effects.
Setup: Google account, a spreadsheet with Requests sheet
Guided practical — 19 steps
Step 1: Create a new Google Sheet. Check: confirm this action before continuing.
Step 2: Rename first tab Requests. Check: confirm this action before continuing.
Step 3: Add Request ID and Status headers. Check: confirm this action before continuing.
Step 4: Enter three fictional request IDs. Check: confirm this action before continuing.
Step 5: Leave one Status cell empty. Check: confirm this action before continuing.
Step 6: Open Extensions → Apps Script. Check: confirm this action before continuing.
Step 7: Paste provided function. Check: confirm this action before continuing.
Step 8: Save project. Check: confirm this action before continuing.
Step 9: Read getActiveSpreadsheet usage. Check: confirm this action before continuing.
Step 10: Understand getDataRange and getValues. Check: confirm this action before continuing.
Step 11: Locate header indices. Check: confirm this action before continuing.
Step 12: Check missing headers handling. Check: confirm this action before continuing.
Step 13: Check empty request ID handling. Check: confirm this action before continuing.
Step 14: Write Pending review only to blank statuses. Check: confirm this action before continuing.
Step 15: Run function manually. Check: confirm this action before continuing.
Step 16: Review permission dialog and scope. Check: confirm this action before continuing.
Step 17: Verify only expected cells changed. Check: confirm this action before continuing.
Step 18: Run again to check idempotency. Check: confirm this action before continuing.
Step 19: Record changes and plan audit log for production. Check: confirm this action before continuing.
Copyable project code / working template
function updateRequestStatuses() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Requests');
if (!sheet) throw new Error('Create a sheet named Requests');
const rows = sheet.getDataRange().getValues();
if (rows.length < 2) return;
const headers = rows[0];
const id = headers.indexOf('Request ID');
const status = headers.indexOf('Status');
if (id < 0 || status < 0) throw new Error('Headers required: Request ID, Status');
for (let r = 1; r < rows.length; r++) {
if (String(rows[r][id]).trim() && !String(rows[r][status]).trim()) {
sheet.getRange(r + 1, status + 1).setValue('Pending review');
}
}
}
Expected output
Script fills a Status column for valid pending requests; does not email or approve externally.
Errors & solutions
Sheet not found: rename tab Requests exactly
Missing headers: check spaces and capitalization
Authorization required: review requested permissions before approving
Practice assignment & self-check
Assignment: Extend the example with one realistic feature, test it, and record the result. Do not use production credentials or real client data.
Knowledge check: Explain the purpose of the main concept, demonstrate the expected output, and identify one likely failure and fix.
LESSON 04 · Full Advanced
GitHub Actions — Static site quality gate
Objective: Run a lightweight HTML check on every push and pull request.
Theory: CI runs repeatable checks on isolated runners; a quality gate catches missing assets before deployment.
Setup: GitHub repository containing index.html
Guided practical — 19 steps
Step 1: Create a repository with index.html. Check: confirm this action before continuing.
Step 2: Commit a valid title element. Check: confirm this action before continuing.
Step 3: Create .github/workflows folder. Check: confirm this action before continuing.
Step 4: Create html-check.yml. Check: confirm this action before continuing.
Step 5: Paste YAML sample. Check: confirm this action before continuing.
Step 6: Understand push and pull_request triggers. Check: confirm this action before continuing.
Step 7: Limit token permissions to contents read. Check: confirm this action before continuing.
Step 8: Understand hosted runner. Check: confirm this action before continuing.
Step 9: Use actions/checkout to retrieve code. Check: confirm this action before continuing.
Step 10: Run file existence check. Check: confirm this action before continuing.
Step 11: Run title check. Check: confirm this action before continuing.
Step 12: Commit workflow file. Check: confirm this action before continuing.
Step 13: Open Actions tab. Check: confirm this action before continuing.
Step 14: Inspect job logs. Check: confirm this action before continuing.
Step 15: Create test branch. Check: confirm this action before continuing.
Step 16: Remove title in branch to see failure. Check: confirm this action before continuing.
Step 17: Restore title and push. Check: confirm this action before continuing.
Step 18: Verify passing result. Check: confirm this action before continuing.
Step 19: Explain why linting and browser tests are future improvements. Check: confirm this action before continuing.
Copyable project code / working template
name: HTML quality gate
on: [push, pull_request]
permissions:
contents: read
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate landing page
shell: bash
run: |
test -f index.html
grep -qi '<title>' index.html
echo 'Basic HTML check passed'
Expected output
Workflow passes when index.html exists and includes a title; fails when it does not.
Errors & solutions
Workflow not visible: check path .github/workflows/*.yml
YAML parse error: check indentation
Check fails: ensure index.html is in repository root
Practice assignment & self-check
Assignment: Extend the example with one realistic feature, test it, and record the result. Do not use production credentials or real client data.
Knowledge check: Explain the purpose of the main concept, demonstrate the expected output, and identify one likely failure and fix.
LESSON 05 · Intermediate
Digital Marketing & SEO — Campaign landing page measurement
Objective: Plan a campaign and measure visits without claiming guaranteed conversions.
Theory: Campaign objectives should map to one conversion; UTM parameters identify source, medium and campaign, but tracking requires analytics setup.
Setup: A landing page, analytics property if available, fictional campaign brief
Guided practical — 19 steps
Step 1: Define the target audience. Check: confirm this action before continuing.
Step 2: Write one clear campaign objective. Check: confirm this action before continuing.
Step 3: Choose a relevant offer. Check: confirm this action before continuing.
Step 4: Create a single landing-page headline. Check: confirm this action before continuing.
Step 5: Write benefits not unsupported claims. Check: confirm this action before continuing.
Step 6: Add a clear call to action. Check: confirm this action before continuing.
Step 7: Define form submission as conversion. Check: confirm this action before continuing.
Step 8: Create privacy notice before collecting data. Check: confirm this action before continuing.
Step 9: Select UTM source. Check: confirm this action before continuing.
Step 10: Select UTM medium. Check: confirm this action before continuing.
Step 11: Select UTM campaign. Check: confirm this action before continuing.
Step 12: Generate tagged URL with sample code. Check: confirm this action before continuing.
Step 13: Open URL and inspect parameters. Check: confirm this action before continuing.
Step 14: Set up analytics with consent where required. Check: confirm this action before continuing.
Step 15: Verify events using debug tools. Check: confirm this action before continuing.
Step 16: Record baseline visits and conversions. Check: confirm this action before continuing.
Step 17: Calculate conversion rate from real counts. Check: confirm this action before continuing.
Step 18: Compare creative variations fairly. Check: confirm this action before continuing.
Step 19: Document results and next test. Check: confirm this action before continuing.
Copyable project code / working template
const landingUrl = new URL('https://example.com/offer');
landingUrl.searchParams.set('utm_source','newsletter');
landingUrl.searchParams.set('utm_medium','email');
landingUrl.searchParams.set('utm_campaign','november_launch');
console.log(landingUrl.toString());
Expected output
A written campaign plan with a UTM-tagged link and measurable conversion event definition.
Errors & solutions
No analytics events: verify tag installation and consent state
Objective: Prepare a scoped, testable client delivery pack with professional acceptance criteria.
Theory: A client project is complete when agreed deliverables and acceptance tests pass, not merely when files are uploaded.
Setup: Fictional client brief and sample website
Guided practical — 20 steps
Step 1: Interview fictional client about goals. Check: confirm this action before continuing.
Step 2: List target users and required pages. Check: confirm this action before continuing.
Step 3: Document in-scope deliverables. Check: confirm this action before continuing.
Step 4: Document exclusions. Check: confirm this action before continuing.
Step 5: Agree measurable acceptance criteria. Check: confirm this action before continuing.
Step 6: Create milestone plan. Check: confirm this action before continuing.
Step 7: Define who supplies content and images. Check: confirm this action before continuing.
Step 8: Choose accessible responsive layout. Check: confirm this action before continuing.
Step 9: Build and test navigation. Check: confirm this action before continuing.
Step 10: Test contact form with approved backend or label demo. Check: confirm this action before continuing.
Step 11: Audit internal links. Check: confirm this action before continuing.
Step 12: Check images and copyright permissions. Check: confirm this action before continuing.
Step 13: Test mobile widths. Check: confirm this action before continuing.
Step 14: Review privacy and consent requirements. Check: confirm this action before continuing.
Step 15: Prepare client review checklist. Check: confirm this action before continuing.
Step 16: Collect written feedback. Check: confirm this action before continuing.
Step 17: Fix defects and rerun tests. Check: confirm this action before continuing.
Step 18: Package source and documentation. Check: confirm this action before continuing.
Step 19: Transfer account ownership securely. Check: confirm this action before continuing.
Step 20: Obtain acceptance and agree support terms. Check: confirm this action before continuing.
Copyable project code / working template
PROJECT: Local Business Website
Scope: 5 responsive pages; contact form integration subject to client-approved backend
Milestones: 1) Brief and wireframe 2) Build 3) QA and review 4) Handover
Acceptance: mobile layout; working navigation; accessible forms; no broken internal links
Handover: source ZIP, deployment instructions, account ownership list, maintenance guide
Excluded: paid ads, ongoing hosting fees, unapproved integrations
Expected output
A written scope, milestone plan, QA checklist and handover inventory.
Errors & solutions
Scope creep: log change requests and agree price/timeline before work
Missing access: use a handover inventory with account owners
Broken links: run automated link audit and manually inspect critical paths
Practice assignment & self-check
Assignment: Extend the example with one realistic feature, test it, and record the result. Do not use production credentials or real client data.
Knowledge check: Explain the purpose of the main concept, demonstrate the expected output, and identify one likely failure and fix.
Media learning options
Video, audio and PDF files are not pre-recorded for these six lessons. Use the existing Video / Audio / PDF Tutorials section for your own recordings. No fake play buttons are shown here.