Dedicated SEO-optimized project page with a devlog environment #165
Closed
blindxfish
wants to merge 5 commits from
blindxfish/devplacepy:pr2-project-devlog-seo into master
pull from: blindxfish/devplacepy:pr2-project-devlog-seo
merge into: retoor:master
retoor:master
retoor:typosaurus/132-missing-notification-when-another-user-comments-on-a-post-th
retoor:typosaurus/134-cosmetic-title-replaces-clickable-username-on-leaderboard
retoor:typosaurus/157-add-badge-earned-info-to-user-profile-badges-api-response
retoor:typosaurus/ticket-150
retoor:typosaurus/ticket-152
retoor:typosaurus/ticket-148
retoor:typosaurus/ticket-146
retoor:typosaurus/112-expose-level-progress-percentage-in-profile-api-response
retoor:typosaurus/113-fix-badge-names-returning-null-in-profile-endpoint
retoor:typosaurus/138-fix-navigation-bar-link-icons-and-text-appearing-on-separate
retoor:typosaurus/ticket-138
retoor:typosaurus/ticket-135
retoor:typosaurus/ticket-132
retoor:typosaurus/ticket-110
retoor:typosaurus/ticket-116
retoor:typosaurus/ticket-113
retoor:typosaurus/ticket-114
retoor:typosaurus/ticket-111
retoor:typosaurus/ticket-112
retoor:typosaurus/ticket-106
retoor:typosaurus/ticket-104
retoor:typosaurus/ticket-84
retoor:typosaurus/ticket-93
retoor:typosaurus/ticket-73
retoor:typosaurus/ticket-89
retoor:typosaurus/ticket-85
retoor:typosaurus/ticket-86
retoor:typosaurus/ticket-88
retoor:typosaurus/ticket-105
retoor:typosaurus/ticket-95
retoor:typosaurus/ticket-102
retoor:typosaurus/ticket-91
retoor:typosaurus/ticket-90
retoor:typosaurus/ticket-87
retoor:typosaurus/ticket-72
retoor:typosaurus/ticket-81
retoor:typosaurus/ticket-83
retoor:typosaurus/ticket-78
retoor:typosaurus/ticket-74
retoor:typosaurus/ticket-82
retoor:typosaurus/ticket-97
retoor:typosaurus/ticket-99
retoor:typosaurus/ticket-68
retoor:typosaurus/ticket-66
retoor:typosaurus/ticket-75
retoor:typosaurus/ticket-61
retoor:typosaurus/ticket-44
retoor:typosaurus/ticket-57
retoor:typosaurus/ticket-48
retoor:typosaurus/ticket-64
retoor:typosaurus/ticket-94
retoor:typosaurus/ticket-103
retoor:typosaurus/ticket-26
retoor:typosaurus/ticket-71
retoor:typosaurus/ticket-7
retoor:typosaurus/ticket-70
retoor:typosaurus/ticket-10
retoor:typosaurus/ticket-65
retoor:typosaurus/ticket-69
retoor:typosaurus/ticket-67
retoor:typosaurus/ticket-76
retoor:typosaurus/ticket-21
retoor:production
5 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
| 8f9f461244 |
Hero text shadow and an owner Add screenshots flow in the More menu
Some checks failed
DevPlace CI / test (pull_request) Has been cancelled
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>
|
|||
| 530ae2b5bb |
Wrap the project page in one encompassing dark card with lighter inner panels
The showcase reference nests the whole project inside a single dark card while inner panels sit a step lighter - the previous layout had it inverted (dark cards straight on the page ground). A .project-shell container now wraps the hero, tab bar and columns with the bg-card surface and clipped corners, and every inner panel (tab bar, sidebar cards, devlog post cards, empty state, comments section) flips to the lighter bg-secondary elevation inside it. The tab bar loses its sticky positioning (impossible inside the shell's overflow clip) and the hero sheds its own card chrome since the shell provides it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
|||
| 8a2e0e6e70 |
Align the project hero with the showcase design: owner cover, logo, repo link
The hero now matches the showcase reference: the title block, tagline (first description line), type/platform chips, author row and started date render OVERLAID on the cover banner behind a bottom scrim, with the optional project logo as a framed tile beside them and the Visit Website CTA on the right. The section tab bar switches to the underline style with Overview active. Owners control the missing pieces from the create and edit modals, which are now multipart: cover_image and logo_image file uploads (stored as bare uploaded filenames via save_inline_image, the posts.image pattern; a new upload replaces the previous one) plus a repo_url sibling of website_url (same normalization/validation). The cover feeds og:image and the schema image, the logo becomes schema thumbnailUrl, and sameAs now carries website + repository. repo_url rides ProjectOut, the Devii create/edit actions and the API docs; tests cover repo normalization, the multipart upload round-trip and the hero render. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
|||
| 3e9475fb61 |
Dedicate the project page to the project: hero, tabs, screenshots, sidebar
The project detail page becomes a full project showcase on the site's content measure. The hero card opens with a cover banner from the project's first image attachment (brand-gradient band as fallback), then title + status chip, type/platform chips, dates and forked-from meta, the author row with an owner-set Visit Website CTA, and the unchanged action row. A sticky anchor tab bar (Overview, Devlog, Screenshots when images exist, Comments, Files) navigates the page with plain server-rendered anchors so crawlers index one complete document. The two-column body keeps About (description + non-image attachments), the Devlog timeline and the comment thread in the main column, adds a Screenshots gallery built from image attachments (lightbox-wired thumbnails), and a sidebar with Links (website, files, fork source), the Stats card with a last-update line, and the Author card. New optional projects.website_url rides the whole stack: normalized and validated in models (scheme-less input gets https://, non-http(s) rejected), settable in the create and edit modals, on ProjectOut, in the Devii create/edit actions and the API docs, rendered as the hero CTA and Links entry with rel noopener nofollow, and emitted as schema.org sameAs. The app schema also gains screenshot urls from the image attachments. The e2e project comment/files tests scope their locators (.comment-form textarea, .project-detail-actions a) per the documented dual-control idiom - the composer modal made the bare selectors ambiguous - and new unit/api tests cover URL normalization, sameAs/screenshot schema output, the cover, and the gallery. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
|||
| 2af5110399 |
Make the project page an SEO-optimized overview with a devlog environment
The project detail page becomes a professional project overview: hero with status/type/dates/forked-from, a stats strip (stars, updates, comments, files, forks with #devlog/#comments anchors), an About section, platforms, and the Devlog timeline under a proper h2 - now rendered with feed.css loaded so the post cards are actually styled. The owner posts updates from the page itself: a Post update button opens the shared create-post composer preset to the devlog topic and this project. The composer form is extracted into _post_composer_form.html and reused by feed.html - one form, two surfaces. SEO: software_application_schema is type-aware via project_schema_type (game -> VideoGame with gamePlatform, website -> WebApplication, software/mobile_app -> SoftwareApplication, game_asset -> CreativeWork) and now carries keywords, image, an aggregateRating from stars, and a comment InteractionCounter. project_devlog_schema emits a Blog node with one BlogPosting per devlog entry. The detail route feeds both, adds meta keywords, and exposes the devlog cursor as rel=next; the sitemap's project lastmod follows the newest devlog post via one grouped query. devlog_count/comment_count ride ProjectDetailOut, the docs projects-detail endpoint documents the before cursor, and the routers/projects CLAUDE.md, templates CLAUDE.md and README document the new surface. Unit, api and e2e tests cover the schema mapping, the JSON-LD in the rendered page, the stats strip, and the preset composer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |