Merged
Conversation
Introduces a public Ecosystem Partners surface that aggregates three
audiences in one grid: organisations from the new partners directory,
graduated validators pulled from the existing validators API, and
projects pulled from Featured Builds. The page ships with a tinted
hero, a three-stat row (with rounded "20+" counts), tinted category
tabs (Partners / Validators / Projects), a uniform square logo grid
that opens external links in a new tab and validator profile pages
in-app, and a soft gradient footer banner that blends with the page
background. Adds a "View all" link in the home page Featured Builds
section that deep-links into the Projects tab.
Backend ships a small `partners` Django app: a `Partner` model
(name/slug/description/logo_url/website_url/url/display_order/is_active)
exposed via a public `ReadOnlyModelViewSet` with slug lookup. The
initial migration also seeds the 22 founding partners with their
Cloudinary-hosted logos so fresh databases come up populated.
Frontend introduces a new `Discover` group in the sidebar (desktop +
mobile) and a `PartnerCard` component under `components/portal/partners`.
Cards render partner logos on a black circle, validator/project items
on a white circle that falls back to a deterministic gradient when no
image is available. The "All" tab interleaves the three categories
with a stable shuffle so the same item always appears in the same
slot across renders and Load more.
- backend/partners/: New Django app with Partner model, light/full serializers, public ReadOnlyModelViewSet (slug lookup, search + ordering filters), admin config, and tests/test_partners.py covering ordering and slug-based detail lookup.
- backend/partners/migrations/0001_initial.py: Creates Partner table and seeds 22 founding partners via RunPython using update_or_create keyed by slug; also deletes legacy example/second placeholder rows.
- backend/api/urls.py: Registers PartnerViewSet on the router under `partners`.
- backend/tally/settings.py: Adds `partners` to INSTALLED_APPS.
- backend/CLAUDE.md: Adds Partners section, partners endpoints to the summary, and the new app to the project tree.
- frontend/src/lib/api.js: Adds `partnersAPI` with `list` and `get(slug)`.
- frontend/src/routes/EcosystemPartners.svelte: New page that fetches from `partnersAPI.list()`, `validatorsAPI.getNewestValidators(200)`, and `featuredAPI.getBuilds()` in parallel, normalises into a uniform `{ id, slug, name, logo_url, href, isExternal, category }` shape, and renders the hero/stats/tabs/grid/footer described above. Reads `?tab=` from the URL via svelte-spa-router `querystring` so deep links to a category work.
- frontend/src/components/portal/partners/PartnerCard.svelte: Reusable square card with rounded logo container, hover frosted name strip, per-category badge color, and per-name gradient fallback for missing images.
- frontend/src/components/portal/FeaturedBuilds.svelte: Adds a `View all` link in the section header pointing at `#/ecosystem-partners?tab=project`.
- frontend/src/components/Sidebar.svelte: Adds a `Discover` section header and an `Ecosystem Partners` entry in both the desktop and mobile sidebars, using a connected-nodes SVG icon and the `#6D5DD3` accent.
- frontend/src/stores/category.js: `detectCategoryFromRoute` now recognises `/ecosystem-partners` (returns `global`).
- frontend/src/App.svelte: Imports `EcosystemPartners` and mounts it at `/ecosystem-partners`.
- frontend/CLAUDE.md: Documents the new route, the `partnersAPI` entry, and the partners components directory.
406d450 to
4d917a6
Compare
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.
Summary
/ecosystem-partners) that aggregates three audiences in a single grid: organisations from a new partners directory, graduated validators (existing API), and projects (Featured Builds).partnersDjango app with a public read-only API and an initial migration that seeds 22 founding partners with Cloudinary-hosted logos.Discovergroup in the sidebar (desktop + mobile) and aView alldeep-link from Featured Builds → Projects tab.What's in the UI
What's NOT in this PR
Gen TV is intentionally out of scope and will follow in a separate PR.
Test plan