EmilandClaude Sonnet 5 b5ffc67a82
Deploy to GitHub Pages / build (push) Canceled after 0s
Deploy to GitHub Pages / deploy (push) Canceled after 0s
Redesign the resume site as a 3D-editor viewport
New design: studio backdrop with a perspective floor and X/Z axis lines, an
orientation gizmo that orbits on scroll, Bricolage Grotesque and Instrument
Sans (bundled, no build-time network). Projects are laid out as plates by a
row planner that keeps every row full for any count; a demo image from the
repo root is shown when present, otherwise a generated voxel sculpture.
Text and projects still come live from Gitea.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XtcZtnG4GQA1d6mW5PNrS9
2026-09-20 21:37:35 +03:00
2026-07-22 03:43:37 +03:00
2026-07-22 03:43:37 +03:00
2026-07-22 03:43:37 +03:00
2026-07-22 03:43:37 +03:00

Emil Shanayev — resume site

Live at https://shanaty.ru/resume/. A static Next.js site whose content is read live from Gitea, so it is updated by editing repositories, not by redeploying.

What comes from where

On the page Source
Name, role, bio, skills, experience, education, languages, contacts data/resume.json in this repo (main branch)
Projects Public repos of Emil_Shanaty on Gitea that carry the topic resume
Project picture Optional demo.png, demo.jpg, demo.gif or demo.webp in the root of that repo
Project title, kind, description, highlights, tech tags, links, order Optional resume-card.json in the root of that repo

A timer on the server (resume_sync.py in the auto repo) rebuilds https://shanaty.ru/data/resume.json every minute from these sources, so a change shows up within about a minute. If a source is broken (invalid JSON, missing fields, unsafe links) the previous published data stays and the problem is logged (journalctl -u gitea-resume).

Adding a project

  1. On Gitea, add the topic resume to the repository (it must be public).
  2. Optional: put a demo.png (or .jpg, .gif, .webp) in the repo root. Up to 6 MB, any proportions; animated GIFs and WebP keep animating. Without one the project gets a generated picture.
  3. Optional: put a resume-card.json in the repo root to control how the project reads:
{
  "title": "Cortex Engine",
  "kind": "AI-native 3D game engine",
  "description": "One or two sentences on what it is and what makes it interesting.",
  "highlights": ["Pure Vulkan 1.3 backend", "Playable FPS demo"],
  "tech": ["C#", "Vulkan", "MCP"],
  "links": [{ "label": "Docs", "href": "https://example.com/docs" }],
  "rank": 1,
  "hidden": false
}

Every field is optional. Without a card the page uses the Gitea description, the repo language and its topics (the topics resume, portfolio and featured are not shown as tags). rank puts a project first (lower first, unranked ones follow, newest first); "hidden": true removes it from the page. The same values can also live centrally in projectNotes (keyed by repo name) in data/resume.json; a resume-card.json wins over it.

The layout adapts to any number of projects: rows of two or three plates with a wider feature plate first, no lone project left in the last row, and a single project gets the whole width.

Editing the text

Edit data/resume.json, commit and push to Gitea (git push gitea main). No rebuild or deploy is needed.

Development

npm install
npm run dev        # http://localhost:3000, data from the public https://shanaty.ru/data/resume.json
npm run build      # static export in out/

BASE_PATH sets the URL prefix (default /Emil_Shanayev_Resume, for GitHub Pages) and NEXT_PUBLIC_DATA_URL the data URL. Fonts (Bricolage Grotesque, Instrument Sans; SIL Open Font License) are bundled in app/fonts, so building needs no network.

Deploy

./deploy-shanaty.sh builds and publishes the site to shanaty.ru (needs the ssh key ~/.ssh/MyGitea). Only needed after changing code or styles.

Design

The page is laid out like a 3D-editor viewport, a nod to the game-engine work it presents: a studio backdrop with a perspective floor whose red X and blue Z axes match the axis colours of Blender and Unity, and an orientation gizmo in the corner that orbits as the page scrolls (press it to go back to the top). Projects without a demo image get a deterministic isometric voxel sculpture generated from the repo name.

Not published on purpose

The official resume on hh.ru holds more personal details (phone, date of birth, salary expectations). This site only carries the professional content.

S
Description
Online résumé of Emil Shanayev, a static Next.js site.
Readme
720 KiB
Languages
HTML 99.9%
JavaScript 0.1%