Alter Showcase is Back!

The alter gallery has had a quiet decade. EchoMTG's collection of community-painted Magic cards — 909 alters from 79 artists — has been sitting in our database since the legacy site was rolled, mostly hidden behind an aging gallery page. This week we shipped a complete rebuild: a fast modern browse, per-artist galleries, single-alter detail pages, an in-page management surface for artists, and proper SEO so search engines and social cards finally see what's there.

If you've ever painted on a Magic card — or want to find someone who did — start here:

What's new

Browse + filter the gallery

The main alter gallery lists every alter in the database, with filters for card name, color, type, and a sort dropdown. Pagination handles the full 909-row corpus without breaking a sweat.

Featured alter from the EchoMTG gallery

Searchable artist directory

We added a dedicated Alter Artists page that lists every user with at least one alter in their account. Search by username, sort by alter count, see total listed value and last-upload date per artist. Click any row to see their full gallery.

Single-artist gallery

Each artist gets their own page at /mtg/alters/<artist>/ — avatar, alter count, total listed value, first/last upload date, and their full gallery. The URL is canonical: shareable, indexable, and stable.

Single-alter detail page

The detail page got a complete rework:

  • Top info card — name, expansion, asking price (or SOLD badge), description, alter artist, original artist, rarity, type
  • Original card panel — full card image with WotC artist credit, current TCG mid + foil price, link to the card detail page
  • Comments column — anyone signed in can leave a comment; new comments appear immediately via optimistic append
  • More alters by this artist — a 4×2 grid of related work, sitting under a 40% black veil that fades to full color on hover

Artist management at /user/alters/

Logged-in users get a polished management surface inside their account: upload a new alter (with optional card binding), inline-edit description / keywords / asking price / sold flag / card reassignment, delete, and a one-click "View public" link to the public alter page. It lives at /user/alters/ next to Profile, Settings, Billing, and the rest of the account section.

How it bridges to the legacy alter database

The whole thing reads from and writes to the same alters, alter_images, alter_comments tables that have been there since the original gallery shipped. No data migration. Every alter ever uploaded is already there. Every comment ever left is already there.

The image bucket assets.echomtg.com is unchanged: alters live at magic/cards/alters/<user>/<alter>/<filename> with pre-built 200/300/750 thumbnails the gallery picks based on density. Old direct image URLs still work.

The legacy /apps/alters/ URL we shipped earlier in the day 301-redirects to /user/alters/ so any links shared in the interim don't 404 — search engines will pick up the canonical move on next crawl.

Built on a clean v2 API

Everything above is backed by a new RESTful surface at /api/v2/alters/:

Method Path What
GET/api/v2/alters/?game=mtg&search=&color=&type=&artist=&sort=&direction=&start=&limit=List with filters
GET/api/v2/alters/{id}/Single alter detail with images + comments
GET/api/v2/alters/artists/?search=Searchable artist directory
GET/api/v2/alters/artist/{username}/Per-artist gallery + stats
POST/api/v2/alters/Create — multipart upload, optional card_id
PATCH/api/v2/alters/{id}/Update — owner-gated
DELETE/api/v2/alters/{id}/Delete — owner-gated
POST/api/v2/alters/{id}/comments/Add a comment — auth-gated

JSON envelopes throughout: { status, data, meta }.

SEO + social previews — finally

Every alter page emits proper meta:

  • Open Graph + Twitter card (summary_large_image) on browse, artist, detail, and artists-directory pages — drop a URL into Facebook's Sharing Debugger or Twitter's Card Validator and you'll see the right card image and a real description.
  • Schema.org JSON-LD on each page type:
    • CollectionPage + ItemList on the browse page
    • ProfilePage + Person on the artist page (so an artist's name resolves to a knowledge-panel result)
    • VisualArtwork on the alter detail page, tied to the artist as creator and the original card as exampleOfWork — with an Offer node when the alter is for sale
  • Canonical <link> tags so duplicate-route variants point to the right URL.

Per-page descriptions are dynamic — the browse page title shows the live count ("596 alters from 63 artists"), the artist page shows their alter count, the detail page includes the asking price and sold state.

Multi-game ready

The route shape is /<game>/alters/.... Today there's /mtg/alters/, but the plumbing already accepts ?game=<slug> on every read endpoint. When the first /lorcana/alters/ lands, the same pages render the right cards with no code changes — just a sort + filter on cards.game.

What's next

Two follow-ups already on the list:

  1. Likes / favoriting on alters so the directory can sort by community signal, not just chronology.
  2. Sitemap regeneration so search engines crawl the new artist + detail URLs immediately rather than waiting on natural discovery.

Got an alter you've been meaning to share? Sign in, hit /user/alters/, and upload it. The gallery is alive again.