fix(course): point the Pinboard references at a repository that exists - #63
Merged
Conversation
Module 2 of the PHP track told readers to fork github.com/nextcloud-dev-course/pinboard-php. That organisation was never created, so every reader who finished module 1 hit a 404 on the next one - and module 1 only started working today, with the standalone env-setup module. The scaffold now lives at github.com/miaulalala/pinboard-php, with the app skeleton on main as the state readers begin from. Repointed: - the fork instruction in php/beginner/2.md, which is the one that actually blocked people - the two pinboard-php entries in the manifest - module 6's "clean copy of App.vue" link, which pointed at tag php/beginner/m6-complete. That tag does not exist yet - the manifest declares 66 tags and none have been created - so it now links the repository rather than a path that would 404 differently. On a personal account deliberately, and only until it can be moved: members cannot create repositories in the nextcloud organisation, so that needs an owner, and a 404 in the course is worse than a repository in the wrong place. Transferring later leaves a redirect, so no reader's fork breaks. Deliberately not touched: the pinboard-exapp and pinboard-federation-lab entries in the manifest. Those have no home yet and repointing them at something that does not exist would only move the problem. Nothing in the app reads the manifest's repo field - it is inert metadata - so no reader follows those; the exapp track's own module 2 has a separate problem, in that it says to fork the scaffold without ever giving a URL. AI-Assisted-By: Claude Opus 5 (1M context) Signed-off-by: Anna Larch <[email protected]>
Module 2 said "fork the Pinboard ExApp scaffold repository on GitHub and clone" without ever naming it, then had readers clone YOUR_USERNAME/pinboard-python. So the ExApp track dead-ended at its second module, and less visibly than the PHP track did: there was no link to click and discover was broken, just an instruction with nothing to act on. The scaffold now lives at github.com/miaulalala/pinboard-python, with the ExApp manifest, the FastAPI skeleton, the asset directories nc_py_api mounts, a Makefile and requirements.txt - the tree module 2 documents. Also settled a naming inconsistency: the content calls it pinboard-python, the manifest called it pinboard-exapp. The content wins, since that is the name readers see and type, and module 2's own structure diagram is headed "# Structure of: ~/pinboard-python/". pinboard-federation-lab is still unhomed and deliberately left alone. The shared federation capstone has no content written, so nothing points a reader at it, and inventing a repository for content that does not exist would be backwards. AI-Assisted-By: Claude Opus 5 (1M context) Signed-off-by: Anna Larch <[email protected]>
There was a problem hiding this comment.
🟡 Changes recommended
The module 6 “complete file reference” link points to the repo root instead of the App.vue file, undermining the stated recovery workflow.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR updates the Academy course content and manifest metadata so Pinboard scaffold/recovery links point to GitHub repositories that actually exist, unblocking learners who previously hit 404s during the PHP (and now also ExApp) beginner tracks.
Changes:
- Repoints the PHP beginner module 2 scaffold “fork” instruction to
miaulalala/pinboard-php. - Updates
content/course-manifest.jsontrack and federation downloadrepofields tomiaulalala/pinboard-php/miaulalala/pinboard-python. - Updates recovery/scaffold references in module content (PHP module 6 and ExApp module 2).
File summaries
| File | Description |
|---|---|
| content/php/beginner/6.md | Updates the “complete file reference” GitHub link for App.vue. |
| content/php/beginner/2.md | Updates the scaffold fork link to the new Pinboard PHP repository. |
| content/exapp/beginner/2.md | Adds an explicit scaffold repository URL for the ExApp track. |
| content/course-manifest.json | Repoints Pinboard-related repo metadata to repositories that exist. |
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Copilot's review on #63. Its diagnosis was right and its suggested fix would have 404'd, which is worth recording. The callout offered "a clean copy of the finished App.vue to recover from". It originally linked tag php/beginner/m6-complete, which does not exist; this PR had repointed it at the repository root, which Copilot correctly called out as making readers hunt for the file. Its proposal was to link src/App.vue on the starting branch - but main is the bare scaffold and has no src/ directory at all, so that link would 404 too. There is no clean copy anywhere yet, because none of the 66 declared checkpoint tags have been created. So the callout now points at the full file already listed in this same module, which is genuinely there, and links academy#28 for the checkpoint work rather than implying a diff target exists. AI-Assisted-By: Claude Opus 5 (1M context) Signed-off-by: Anna Larch <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The problem
Both beginner tracks dead-ended at module 2.
PHP:
php/beginner/2.mdtold readers to forkgithub.com/nextcloud-dev-course/pinboard-php. That organisation was never created — it 404s, as do all three repositories the manifest referenced.ExApp: worse, and less visibly.
exapp/beginner/2.mdsaid "fork the Pinboard ExApp scaffold repository on GitHub and clone" and never gave a URL, then had readers cloneYOUR_USERNAME/pinboard-python. There wasn't even a dead link to click and discover was broken.That got sharper today: module 1 only started working with #61's standalone env-setup module, so the course now leads people confidently to a locked door.
The fix
Both scaffolds are published, taken from
course-development/course/scaffolds/, which is what the course was actually written against:appinfo/info.xml,appinfo/routes.phpandlib/AppInfo/Application.php, withlib/Controller/,lib/Db/,lib/Service/,templates/,js/andcss/deliberately empty. Module 2 documents this exact tree, so the scaffold matches it rather than containing the answers.ex_app/lib/main.py, theex_app/{img,css,js}directoriesnc_py_apimounts,l10n/, a Makefile andrequirements.txt.Both gained the AGPL-3.0-or-later text, which their SPDX headers and
info.xmlalready referenced without the repository carrying it, and both READMEs had their only link fixed — it pointed atnextcloud-dev-course.com, which does not resolve.Changed here
php/beginner/2.md— the one that actually blocked peopleexapp/beginner/2.md, which now names a repositorypinboard-phpandpinboard-exappentriesApp.vue" at tagphp/beginner/m6-complete. None of the 66 declared tags exist, so it now points at the full file already listed in that module and links Self-test both beginner tracks end to end #28 for the checkpoint work, rather than implying a diff target exists.Naming
The content calls it
pinboard-python, the manifest called itpinboard-exapp. The content wins — that's the name readers see and type, and module 2's own structure diagram is headed# Structure of: ~/pinboard-python/.On the personal account
Deliberate, and only until it can move. Members cannot create repositories in the
nextcloudorganisation (members_can_create_repositories: falseon all four flags), so that needs an org owner —nextcloud/academyitself is the precedent. A dead end in the course is worse than a repository in the wrong place, and transferring later leaves a redirect behind, so no reader's fork breaks.Not touched
pinboard-federation-labin the manifest. The shared federation capstone has no content written, so nothing points a reader at it, and inventing a repository for content that doesn't exist would be backwards.Follow-up
None of the 66 checkpoint tags exist, and the filled-in copies on disk can't become tags as they stand: two of them disagree with each other, and neither has a migration despite carrying
PinandPinMapper, so the app can't create its table. A reader diffing against that would conclude they'd added something wrong. The tags have to come from walking the app through each module and committing the verified result — which is the same job as #28.AI-Assisted-By: Claude Opus 5 (1M context)