Welcome! This repository holds the source and planning notes for my personal website. The site is built with Next.js and is designed to be easily customisable. The list below outlines the planned sections and features in the order they would appear in the navigation.
For setup instructions and other guides, check out the docs folder.
- Dark mode with glass UI: Enabled by default with the ability to switch themes (dark/light/sepia).
- Design editor: Adjust colours, fonts (with switcher), animation presets, and save/load the entire configuration as JSON.
- Presets: Multiple ready-made themes with the ability for visitors to pick their preferred palette.
- Font switcher: Users can choose between a few predefined fonts.
- Cookie consent: A small banner informs visitors about cookies.
- Announcement bar: A top bar for news or updates.
- Visitor counter: Displays the total number of visits.
- Reading progress indicator: Shows how far down the current page the visitor has scrolled.
- Back-to-top button: Always visible in the bottom-right corner.
- Global search: Searches across all sections.
- RSS feed link: Exposed in the footer.
- QR code: An automatically generated QR code that links to the site.
- Donate button: Links to an external donation page.
- Analytics: Integrates a privacy-friendly analytics script (e.g., Plausible) with support for robots, sitemap and OpenGraph tags.
- Keyboard hints: Brief tooltips for available hotkeys (e.g. / to search).
- Sticky header: Contains the logo, site name, navigation links and a colour-changing underline.
- Scrollable nav bar: On mobile, items overflow horizontally.
- Footer: Includes the RSS link, sitemap link and a small credit (“Built with Next.js”).
- Floating control bar: Contains quick actions (scroll to top, contact, open design editor).
- Left-side timeline marker: For timeline sections, a vertical line emphasises the chronology.
- Menu hover animations: Subtle scale/colour change on hover.
- Shows your name and tagline but hides the domain on small screens.
- Buttons for Email, Telegram, Discord, Facebook, Steam and GitHub; icons are loaded from Lucide.
- Random inspirational quote displayed beneath the tagline.
- Animated background grid with optional parallax.
- “Contact” button leads to the contact section.
- “Edit design” triggers the editor panel.
- A longer paragraph about yourself (more than just one line).
- A “Read more” link reveals further details or redirects to your career timeline.
- Facts and fun tidbits can be added as bullets.
- Optional photo on the side.
- Separate section where you can describe your mission and values.
- Could include three pillars or principles that guide your work and life.
- Skills are grouped by category (e.g. Backend/Go, Observability, Infrastructure).
- Each skill has a level (frequent, occasional, beginner) and is colour-coded.
- Programming languages (Русский, English, Deutsch) appear as small badges beneath the technical skills.
- A radar chart visualises your proficiency across the main categories.
- “Currently learning” shows technologies you are exploring.
- Shows up to six projects on the home page.
- Each card lists the project name, description, tags and either a GitHub link or a “believe me” note if no link is available.
- Cards animate slightly on hover.
- A “Show more” button loads additional projects.
- A “All projects” link navigates to a dedicated page.
- Cards display the last update date.
- Placeholder projects can be defined via environment variables.
- A searchable and filterable list of interview questions.
- Filters: frequency (часто/норма/редко) and complexity.
- Each question has tags (e.g. “Go”, “Database”) and a checkbox to mark it as done (persisted in localStorage).
- Buttons to import/export the question set as JSON and to sync to the cloud (via your API).
- Optional difficulty sorting.
- Search input with fuzzy search.
- Displayed as a grid grouped by year.
- Each card shows the destination, date and a personal note.
- No map or distance statistics.
- Scrollable within its own container.
- If there are no trips, it displays “пока тут пусто”.
- Initially shows nine images in a 3×3 grid.
- Supports external images via NEXT_PUBLIC_GALLERY_URLS; if empty, a “пока тут пусто” message is shown.
- Hover zoom effect on each image.
- A toggle switches between grid and slide-show view.
- Clicking an image opens a lightbox with arrows for navigation and dark overlay.
- Dedicated timeline for your career milestones.
- Each entry includes a title, company, date, and short description.
- Expand/collapse button toggles the timeline’s visibility.
- Minimal styling (no icons or emoji).
- A separate timeline for life events (optional).
- Shorter and less detailed than the career timeline.
- A set of badge-style cards highlighting major accomplishments.
- At least four items, without year or external links.
- Each badge is colour-coded or icon-based.
- Divided into “Reading”, “Watching” and “Listening”.
- Items link to playlists or channels (no automatic cover retrieval).
- A “Save for later” list lets you store links you want to consume later.
- Random quotes appear in the hero (global feature).
- Displays a list of frequently asked questions.
- The first item is expanded by default.
- Search input filters questions.
- No “expand all” button.
- Proper ARIA attributes for accessibility.
- Lists your current activities/goals.
- Shows the date of last update.
- A “Share update” button copies a link to the clipboard.
- No progress bars.
- A section linking to your favourite courses, books or resources.
- Each item includes a short summary and link.
- The list can be sorted or filtered if needed.
- Lists your daily tools (IDEs, languages, services).
- Each item includes a brief description and optional link.
- A selection of predefined colour schemes that visitors can apply.
- Appears in the design editor.
- Changing a preset automatically updates the site palette.
- A timeline-style feed with short posts.
- Each entry has a timestamp, title and a few sentences.
- Posts can be filtered or searched.
- The site owner can tag posts and readers can mark favourites.
- Lists playlists or albums you enjoy.
- Each entry links to an external platform (Spotify, YouTube, etc.).
- Could display an embedded player if allowed.
- Placeholder cards for upcoming projects or features.
- Visitors can subscribe via RSS to be notified when these launch (but no email form).
- Divided into three groups: Social (Facebook, Instagram, YouTube, etc.), Professional (Email, LinkedIn, GitHub, Telegram), and Gaming (Steam, Discord).
- Each item appears with an icon and label.
- All links are defined through environment variables (NEXT_PUBLIC_EMAIL, NEXT_PUBLIC_TELEGRAM, etc.).
- No contact form is provided.
- Pomodoro timer: A small widget accessible from the floating bar.
- Random quote generator: Displays a different quote on each page load.
- GitHub widget: Shows recent commits to selected repositories.
- Gallery tags: Each image can be assigned categories for filtering.
- Visitor count: A simple counter increments on each visit (can be stored in localStorage or a backend if available).
- Site map: A small text-based site map appears in the footer.
- Environment-driven links: Most external links (projects, playlists, socials, gallery) are pulled from .env variables for easy editing without code changes.
- No download of CV/Resume PDF.
- No testimonials or endorsements section.
- No volunteering/community involvement section.
- No education section.
- No form submission (no contact form or newsletter subscribe).
- No reading time estimates on articles.
- No star ratings for materials.
- No map or statistics in the travel section.
- Current year is not shown in the footer.
src/
– application source (pages, components, styles)scripts/
– helper scriptssecrets/
– generated secrets (ignored by git)certs/
– TLS certificates for HTTPSdeployments/
– Docker and Nginx configurationdocs/
– additional documentation such as deployment and design guides
This project uses Next.js with TypeScript and Yarn.
If Yarn is unavailable, enable it with corepack enable
.
To start the site locally, run:
yarn install
yarn dev
Then open http://localhost:3000 in your browser.
Generate a random application secret:
make generate-secret
See docs/deployment.md for Docker and HTTPS instructions.
To build a container image directly:
docker build -t personal-site .
The Dockerfile enables Corepack so the pinned Yarn version is used automatically during the build.