Dedicated SEO-optimized project page with a devlog environment #165
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "blindxfish/devplacepy:pr2-project-devlog-seo"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Make the project page a dedicated, SEO-optimized project showcase with a professional devlog environment. Builds on the look-and-feel PR.
The page
feed.css), a devlog-count header, and an owner Post update button opening the shared composer preset to the devlog topic + this project (form extracted to_post_composer_form.html, reused by the feed).POST /projects/{slug}/screenshots, reusinglink_attachments).New owner fields
website_url,repo_url(validated/normalized),cover_image,logo_image(multipart uploads via theposts.imagepattern) - in the create and edit modals, ProjectOut, the Devii actions and the API docs.SEO
Type-mapped JSON-LD (game→VideoGame with gamePlatform, website→WebApplication, software/mobile_app→SoftwareApplication, game_asset→CreativeWork) with keywords, image (cover-first),
screenshot[],aggregateRatingfrom stars, comment counter,sameAs(website+repo),thumbnailUrl(logo), plus aBlog/BlogPostinggraph for the devlog. Meta keywords, crawlablerel=nextdevlog pagination, and sitemaplastmodfollowing the newest devlog post.Tests
New unit tests (schema mapping, URL normalization, Blog graph), api tests (devlog counts, JSON-LD render, cover/logo upload round-trip, screenshots flow + non-owner 403, website/repo edit round-trip), e2e tests (stats card, preset composer, guest gating); the project comment/files e2e tests scope their locators per the documented dual-control idiom.
🤖 Generated with Claude Code
The hero overlay title, tagline and author row get a dark text shadow so they stay readable over bright cover art. The owner's More menu gains Add screenshots: a modal with the shared attachment uploader whose POST /projects/{slug}/screenshots (ProjectScreenshotsForm, owner-only, audit project.screenshots.add, catalogued in events.md) links the uploaded uids through the same attachments.link_attachments choke point as create/edit and returns to #screenshots. Documented as projects-screenshots in the API docs, exposed to Devii as project_add_screenshots (upload via upload_file/attach_url first), and covered by an api test for the owner flow, the gallery render, and the non-owner 403. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>Closing this in favour of #166, which is the same feature rebuilt from scratch on current master with the review points addressed. Point by point:
1. The SEO layer is dropped entirely. No
seo.pychanges, no JSON-LD, no meta or schema work in the replacement. The page is the deliverable; search-engine markup is not part of it.2. camelCase in the database. Those were schema.org JSON-LD property names (
datePublished,sameAsand friends) in the SEO block, not column names. Nothing was ever written to the database in camelCase. Since the SEO layer is gone, the question is moot; the two new columns in the replacement arewebsite_urlandrepo_url.3. Every upload path is now the existing attachment pipeline. Cover image, logo and screenshots are all attachment references (
cover_attachment_uid,logo_attachment_uid), uploaded by the existingdp-uploadwidget to/uploads/uploadand linked throughattachments.link_attachments. There is no second upload path and no bespoke file handling anywhere in the diff. The route validates each uid viadatabase.get_user_attachment(must exist, belong to the actor, be an image) before linking, so a foreign or unknown uid is ignored rather than linked.4. No markdown re-slicing. The only addition to
content.pyiscount_project_devlog, which is a count query. Rendering stays entirely onrender_content/render_title.5. No comments or docstrings in source. Nothing under
devplacepy/adds either. The only docstrings in the diff are in test files that already use them.Also folded in: the post composer form now lives once in
templates/_post_composer_form.htmland is included by bothfeed.htmlandproject_detail.html, rather than being duplicated.Full suite on the replacement branch: 3334 passed, 9 failed, the 9 being the
tests/api/projects/workspace.pydocker-CLI set that fails identically on untouched master here.Pull request closed