# Go Steps - Chapters 1-10

## Open the hosted app on iPhone

1. Open the hosted **HTTPS website URL** in Safari. Your network must be allowed to reach that host.
2. Tap **Share > Add to Home Screen**. If offered, leave **Open as Web App** enabled.
3. Open the Home Screen app while connected and wait for **Offline ready**.
4. You can then reopen the app and use all 150 downloaded lessons offline.

The **Install / offline** panel shows download status and installation instructions. Adding a Home Screen icon by itself is not proof that the offline download finished.

No App Store account, Go installation, or native iOS build is required. The first hosted download, later updates, and recovery after browser storage is cleared require a connection to the host.

## Open a desktop ZIP copy

1. Extract the entire ZIP into a folder. On Windows, use **Extract All**.
2. Open **index.html** from that extracted folder in a current Microsoft Edge, Chrome, or Firefox browser.
3. Choose **Let's begin**, or pick any lesson from the chapter navigation.

Do not open just the HTML file from inside the ZIP: its neighboring `assets` and `content` folders must also be extracted.

**The extracted desktop copy needs no installation, account, internet connection, Node.js, web server, or Go compiler.** It shows **Local file copy** rather than registering a service worker. For iPhone installation, use the hosted HTTPS app instead of opening the ZIP in Files.

## What is implemented

Chapters 1-10 contain 150 lessons, with explanations, examples, two levels of hints, and 600 interactive questions. The activities include choosing an answer, filling a short blank, and ordering steps.

Each lesson targets 5-10 minutes, with a review or checkpoint after every five focused lessons and no required large project. Chapters 6, 9, and 10 have additional practice for mutation, ownership, and interfaces; Chapter 8 includes the expanded string and conversion library lessons.

The course overview shows all ten available chapters. Choose a chapter to see its lesson list, or continue directly from your saved place. The next-lesson button moves across chapter boundaries.

`SYLLABUS.md` describes the full 31-chapter, 444-lesson plan, including later algorithms and Kubernetes material. Chapters 11-31 are not implemented in this release.

## Skip without losing your place

**Skip lesson** saves the current attempt, marks the lesson **completed manually**, and moves to the next lesson. It is available during reading and practice.

Manual completion counts toward course progress, but does not invent an accuracy score or mark unanswered questions correct. Your answers, hints, and question position remain saved. A manually completed lesson has an **M** marker.

Reopen that lesson and choose **Resume saved practice** to continue where you stopped. Manual completion credit remains while you practice; finishing the actual quiz replaces the manual marker with the real result. Existing quiz history is not erased by skipping a retake.

If the browser cannot save progress, Skip lesson stays on the current lesson and explains the problem instead of claiming the attempt was saved.

## What the answer checker does

The page checks structured quiz answers. **It does not compile or execute Go**, and it does not use an AI service to grade answers.

Text questions accept the requested short token, expression, or command and any explicitly supported equivalent forms. They are not a general-purpose Go editor. Go names and string contents are case-sensitive, and meaningful spaces inside quoted strings are preserved. Vocabulary and PowerShell cmdlet-name questions explicitly allow different letter casing.

Wrong answers have feedback and can be retried. Hints and revealed answers help you move forward without getting stuck. The completion score counts answers that were correct on the first try without hints. Assisted attempts are marked for review; a later unassisted attempt can clear that mark.

A lesson is counted as completed after all four questions are worked through, including any revealed answers, or when you explicitly mark it complete through Skip lesson. Manual completions are labeled separately. Neither is a claim that you independently wrote and ran the code.

## Keep your progress

When browser storage is available, the app saves completed lessons and unfinished question attempts locally. Reopening the same copy in the same browser usually restores them.

Browser handling of local-file and installed-app storage varies. Moving the folder, changing browsers, switching from a ZIP to the hosted site, using private browsing, or clearing browser data may make an old save unavailable. Export/import inside the installed Home Screen app to transfer desktop progress. A visible warning appears if progress cannot be loaded or saved.

Use **Your progress > Export progress** to download a JSON backup. Use **Import a backup** to restore it. Importing and resetting require confirmation. Invalid imports leave the current progress unchanged.

Saved progress and exported backups from the original Chapter 1 version are migrated automatically. The existing answers, scores, theme, and resume location are preserved; no reset is required. Older copies of the app cannot understand newer save fields, so use the current release when importing a new backup.

If another tab changes the stored progress, this tab switches to temporary progress rather than overwriting the other tab's work. Export the version you want to keep, or reload to use the stored copy.

No progress, answers, or imported files are uploaded. The hosted version contacts its own host to download app files and look for updates; the host may log those requests. The optional official-documentation links open external reference pages.

## Offline copies and updates

The hosted app downloads an explicit set of public files, verifies their release hashes, and saves them in a versioned browser cache. It reports **Offline ready** only after all ten chapters and their app assets are present. It does not cache arbitrary websites or authentication requests.

When a new release finishes downloading, the app shows **Update ready**. Choose **Save and update** when convenient. A new release does not automatically interrupt your quiz. If progress cannot be saved, the app blocks that reload and asks you to export a backup first.

If an installed copy still shows only Chapter 1, use **Install / offline > Check / download**, then **Save and update** when the new release is ready.

A failed or inconsistent release download keeps the previous working cache. If cached files are missing, an online reload can retrieve the current release; release-qualified asset URLs prevent an older worker from substituting old scripts into that new page.

Browser-managed files can be evicted, and local progress is not cloud synchronization. Keep backups. If the app says its offline copy is missing, reconnect and use **Check / download**. Reference documentation hosted on other websites is not included in the offline copy.

## Optional: run a tiny Go program

If Go is already installed, open PowerShell in the extracted course folder:

```powershell
go version
go run .\examples\hello.go
```

To build and then run a Windows executable:

```powershell
go build -o hello.exe .\examples\hello.go
.\hello.exe
```

The sample prints:

```text
Hello, Go!
One small step at a time.
```

The first chapter's runnable examples use basic Go syntax. The full syllabus uses a Go 1.27 module baseline, and lesson 01.09 explains how the installed toolchain differs from a module's `go` directive. `examples\module-example.txt` is an illustrative module file, not an active module or a request to download another toolchain.

The optional local commands above run code on your computer; clicking quiz buttons does not.

## Files in the ZIP

```text
index.html
START-HERE.md
SYLLABUS.md
manifest.webmanifest
sw.js
assets\
    core.js
    app.js
    styles.css
    build.js
    pwa.js
content\
    catalog.js
    chapter-01.js
    chapter-02.js
    chapter-03.js
    chapter-04.js
    chapter-05.js
    chapter-06.js
    chapter-07.js
    chapter-08.js
    chapter-09.js
    chapter-10.js
icons\
    icon.svg
    icon-192.png
    icon-512.png
    apple-touch-icon.png
examples\
    hello.go
    module-example.txt
```

The ZIP intentionally excludes developer dependencies, browser-test tools, screenshots, generated binaries, and package-manager files.

## Developer source workspace

The source folder also has Node.js tests and browser checks. They are not needed to open the ZIP. In the source folder, developer commands are:

```powershell
npm ci
npm run build
npm test
npm run test:browser
npm run test:pwa
node .\checks\examples.cjs
.\checks\package.ps1
```

The browser checks use an installed Microsoft Edge and Playwright as a development-only dependency. The example check compiles and runs the marked standalone programs and test fixtures using an installed local Go toolchain without automatically downloading a new one. A chapter selector such as `node .\checks\examples.cjs 08` limits it to that chapter.

`npm run build` generates **dist\site** from the explicit allowlist in **checks\public-files.json**. It creates release-qualified HTML, a build identifier, and a service worker with the exact public-asset hashes. The package command rebuilds that output and writes **dist\go-steps-course.zip** with only those files. After changing the SVG artwork, run `npm run icons` before building.

For hosting, use **dist\site**, not the project root. Never upload `node_modules`, `checks`, `tests`, `artifacts`, progress backups, credentials, or local configuration. Keep the folders intact. HTML, JavaScript, CSS, JSON manifests, and icons must have their appropriate content types. Publish `sw.js` last, after the rest of the release is available.

The source-folder `index.html` remains usable as a desktop file, but hosted development should serve **dist\site**. Service workers require HTTPS, except for browser-supported localhost development. Public hosting must comply with the hosting account's policies; PWA installation does not grant permission to bypass network restrictions.
