Update content & design (#75)
All checks were successful
Deploy to Pages / build (push) Successful in 2m58s
All checks were successful
Deploy to Pages / build (push) Successful in 2m58s
Reviewed-on: https://home.schmelczer.dev/git/git/andras/schmelczer-dev/pulls/75
This commit is contained in:
parent
0be50b6c24
commit
b554e92e9f
83 changed files with 2995 additions and 723 deletions
BIN
src/content/projects/_assets/backup.png
Normal file
BIN
src/content/projects/_assets/backup.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
BIN
src/content/projects/_assets/fizika.jpg
Normal file
BIN
src/content/projects/_assets/fizika.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
BIN
src/content/projects/_assets/frame.jpg
Normal file
BIN
src/content/projects/_assets/frame.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 MiB |
BIN
src/content/projects/_assets/perfect-postcode.jpg
Normal file
BIN
src/content/projects/_assets/perfect-postcode.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 377 KiB |
47
src/content/projects/_assets/vault-link.svg
Normal file
47
src/content/projects/_assets/vault-link.svg
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#4A90E2;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#357ABD;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background circle -->
|
||||
<circle cx="100" cy="100" r="90" fill="url(#grad1)" opacity="0.15"/>
|
||||
|
||||
<!-- Main vault icon -->
|
||||
<g transform="translate(100, 100)">
|
||||
<!-- Vault body -->
|
||||
<rect x="-45" y="-50" width="90" height="80" rx="8" fill="none" stroke="url(#grad1)" stroke-width="6"/>
|
||||
|
||||
<!-- Vault door circle -->
|
||||
<circle cx="0" cy="-10" r="22" fill="none" stroke="url(#grad1)" stroke-width="5"/>
|
||||
<circle cx="0" cy="-10" r="14" fill="none" stroke="url(#grad1)" stroke-width="3"/>
|
||||
<circle cx="0" cy="-10" r="6" fill="url(#grad1)"/>
|
||||
|
||||
<!-- Vault handle -->
|
||||
<line x1="0" y1="-4" x2="18" y2="-4" stroke="url(#grad1)" stroke-width="3" stroke-linecap="round"/>
|
||||
<circle cx="18" cy="-4" r="4" fill="url(#grad1)"/>
|
||||
|
||||
<!-- Link chain -->
|
||||
<g opacity="0.9">
|
||||
<!-- Left link -->
|
||||
<ellipse cx="-30" cy="40" rx="12" ry="8" fill="none" stroke="url(#grad1)" stroke-width="4"/>
|
||||
<!-- Right link -->
|
||||
<ellipse cx="30" cy="40" rx="12" ry="8" fill="none" stroke="url(#grad1)" stroke-width="4"/>
|
||||
<!-- Center link connecting them -->
|
||||
<ellipse cx="0" cy="40" rx="12" ry="8" fill="none" stroke="url(#grad1)" stroke-width="4"/>
|
||||
</g>
|
||||
|
||||
<!-- Sync arrows (subtle) -->
|
||||
<g opacity="0.5">
|
||||
<!-- Clockwise arrow top-right -->
|
||||
<path d="M 35 -35 Q 50 -35 50 -20 L 50 -15" fill="none" stroke="url(#grad1)" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<polygon points="50,-15 47,-22 53,-22" fill="url(#grad1)"/>
|
||||
|
||||
<!-- Counter-clockwise arrow bottom-left -->
|
||||
<path d="M -35 25 Q -50 25 -50 10 L -50 5" fill="none" stroke="url(#grad1)" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<polygon points="-50,5 -47,12 -53,12" fill="url(#grad1)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2 KiB |
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Ad Astra
|
||||
description: A tiny embedded game engine and custom PCB built around an ATtiny85V.
|
||||
description: 'A handheld game built from a custom PCB up: ATtiny85V, OLED, IR, EEPROM. 8-bit ALU at 8 MHz, 50 FPS floor.'
|
||||
thumbnail:
|
||||
src: ./_assets/ad-astra.jpg
|
||||
alt: The Ad Astra handheld game running on its OLED display.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Avoid
|
||||
description: A small early web game, kept as an archive of first experiments on the web.
|
||||
description: My first browser game, kept around so the timeline is honest.
|
||||
thumbnail:
|
||||
src: ./_assets/avoid.jpg
|
||||
alt: Screenshot of the Avoid canvas game.
|
||||
|
|
|
|||
17
src/content/projects/backup-container.md
Normal file
17
src/content/projects/backup-container.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
title: Backup Container
|
||||
description: A Bash container around BorgBackup. BTRFS snapshot for atomic consistency, numeric env vars for multi-target 3-2-1, sleep-loop instead of cron.
|
||||
thumbnail:
|
||||
src: ./_assets/backup.png
|
||||
alt: Placeholder thumbnail for the backup container project.
|
||||
period: '2024-2026'
|
||||
sortDate: 2024-06-01
|
||||
technologies: ['Bash', 'BorgBackup', 'BTRFS', 'Alpine', 'Docker', 'SSH', 'zstd']
|
||||
selected: false
|
||||
essay: backup-container-btrfs-borg
|
||||
links:
|
||||
- label: Source
|
||||
url: https://github.com/schmelczer/backup-container
|
||||
- label: Container image
|
||||
url: https://github.com/schmelczer/backup-container/pkgs/container/backup-container
|
||||
---
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: City Simulation
|
||||
description: A Unity traffic simulation where REST-controlled traffic lights could produce visible consequences for a cybersecurity challenge.
|
||||
description: A Unity city where REST-controlled traffic lights made bad PLC code visible as car crashes.
|
||||
thumbnail:
|
||||
src: ./_assets/city-simulation.jpg
|
||||
alt: Screenshot of a Unity city traffic simulation.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Photo Colour Grader
|
||||
description: A proof-of-concept colour grading UI based on selecting colours and transforming nearby colour ranges.
|
||||
description: Pick a colour, edit every nearby colour as a function of distance. A grader built around one interaction idea.
|
||||
thumbnail:
|
||||
src: ./_assets/photo-colour-grader.jpg
|
||||
alt: Screenshot of a colour grading interface applied to a photograph.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: decla.red
|
||||
description: A team-based mobile multiplayer browser game with shared client/server game logic.
|
||||
description: Browser multiplayer where the client and server linked the same TypeScript rules module. Concurrency bugs you can't have are bugs you don't have.
|
||||
thumbnail:
|
||||
src: ./_assets/declared.jpg
|
||||
alt: The decla.red browser game interface showing a space scene.
|
||||
|
|
|
|||
17
src/content/projects/fizika.md
Normal file
17
src/content/projects/fizika.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
title: Fizika
|
||||
description: 'I needed it for my own physics érettségi: 659 past-paper questions, jQuery, localStorage, no accounts. Eight years on, students still find it.'
|
||||
thumbnail:
|
||||
src: ./_assets/fizika.jpg
|
||||
alt: Screenshot of the Fizika practice app showing topic-selection buttons.
|
||||
period: '2017-2018'
|
||||
sortDate: 2018-05-01
|
||||
technologies: ['jQuery', 'HTML/CSS', 'Node/Express', 'JSON', 'localStorage']
|
||||
selected: false
|
||||
essay: fizika-erettsegi-practice-app
|
||||
links:
|
||||
- label: Live
|
||||
url: https://fizika.schmelczer.dev
|
||||
- label: Source
|
||||
url: https://home.schmelczer.dev/git/andras/fizika
|
||||
---
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: Fleeting Garden
|
||||
description: A WebGPU drawing toy where coloured strokes spawn agents that follow them, branch off, and slowly rewrite the patch you laid down.
|
||||
description: A single-file WebGPU drawing toy. Your strokes seed a swarm; nine numbers per vibe give each preset its personality.
|
||||
thumbnail:
|
||||
src: ./_assets/fleeting-garden.jpg
|
||||
alt: A kaleidoscopic Fleeting Garden snapshot of cyan, violet, and yellow agent trails radiating from a central knot.
|
||||
period: '2026'
|
||||
sortDate: 2026-05-01
|
||||
technologies: ['TypeScript', 'WebGPU', 'WGSL', 'Compute shaders', 'Vite', 'Physarum']
|
||||
technologies: ['TypeScript', 'WebGPU', 'WGSL', 'Compute shaders', 'Vite', 'Tweakpane']
|
||||
selected: true
|
||||
essay: fleeting-garden-webgpu-drawing
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Foreign Exchange Prediction Experiment
|
||||
description: A frequency-domain prediction experiment using smoothing, differentiation, STFT, extrapolation, and inverse transforms.
|
||||
description: A Hanning-windowed STFT experiment on EUR/USD. Passable backtest, sober conclusions, no real money risked.
|
||||
thumbnail:
|
||||
src: ./_assets/forex.jpg
|
||||
alt: Chart from a foreign exchange prediction experiment.
|
||||
|
|
|
|||
24
src/content/projects/frame.md
Normal file
24
src/content/projects/frame.md
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
title: Frame
|
||||
description: A LAN-only e-ink photo frame. Pulls from self-hosted Immich, gated on Home Assistant presence, Atkinson-dithered to 6 colours, no cloud.
|
||||
thumbnail:
|
||||
src: ./_assets/frame.jpg
|
||||
alt: The e-ink frame on the wall showing a dithered landscape photo with the capture age and EXIF location painted into the bottom corners.
|
||||
period: '2026'
|
||||
sortDate: 2026-05-01
|
||||
technologies:
|
||||
[
|
||||
'Python',
|
||||
'Raspberry Pi Zero 2W',
|
||||
'Waveshare PhotoPainter',
|
||||
'Immich',
|
||||
'Home Assistant',
|
||||
'numba',
|
||||
'Atkinson dither',
|
||||
]
|
||||
selected: true
|
||||
essay: frame-eink-photo-display
|
||||
links:
|
||||
- label: Source
|
||||
url: https://home.schmelczer.dev/git/andras/frame
|
||||
---
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: GreatAI
|
||||
description: A Python framework and research project for making AI deployment best practices easier to adopt.
|
||||
description: One decorator on a Python function turned it into a deployed ML service. MSc thesis with a survey to back the API choices.
|
||||
thumbnail:
|
||||
src: ./_assets/great-ai.png
|
||||
alt: Example Python code using the GreatAI API.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: Lights Synchronized to Music
|
||||
description: A Raspberry Pi music player that drove RGB LED strips from audio analysis.
|
||||
description: Raspberry Pi music player, NumPy FFT, MOSFETs, RGB strips. The first thing I built that I actually finished.
|
||||
thumbnail:
|
||||
src: ./_assets/leds.jpg
|
||||
alt: RGB LED strips glowing from a music synchronization project.
|
||||
period: 'Spring 2016'
|
||||
sortDate: 2016-04-01
|
||||
technologies: ['Python', 'NumPy', 'FFT', 'Raspberry Pi', 'Vanilla web']
|
||||
technologies: ['Python', 'NumPy', 'FFT', 'Raspberry Pi', 'MOSFETs', 'vanilla web']
|
||||
selected: false
|
||||
essay: lights-synchronized-to-music
|
||||
links: []
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: My Notes
|
||||
description: A minimalist Android markdown note organizer and editor powered by Markwon.
|
||||
description: A small Android Markdown note app. The point was a few weeks outside the web stack.
|
||||
thumbnail:
|
||||
src: ./_assets/my-notes.png
|
||||
alt: Screenshot of the My Notes Android markdown app.
|
||||
period: 'November 2019'
|
||||
sortDate: 2019-11-01
|
||||
technologies: ['Android', 'Kotlin/Java', 'Markdown', 'Markwon']
|
||||
technologies: ['Android', 'Markdown', 'Markwon']
|
||||
selected: false
|
||||
essay: my-notes-android-markdown-app
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Graph Editor
|
||||
description: A JavaFX editor for creating and editing input graphs for the cooling system simulator.
|
||||
description: A drag-and-drop JavaFX editor that let event organisers reconfigure the cooling sim without me sitting next to them.
|
||||
thumbnail:
|
||||
src: ./_assets/process-simulator-input.jpg
|
||||
alt: JavaFX editor interface for the cooling system simulator input graph.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Cooling System Simulation
|
||||
description: A graph-based process simulation with a monitoring client and JavaFX input editor.
|
||||
description: 'A live cooling-plant simulator for a PLC cybersecurity event. Flow as graph traversal and heat as a matrix solve: two passes instead of one PDE.'
|
||||
thumbnail:
|
||||
src: ./_assets/nuclear-simulation.jpg
|
||||
alt: Cooling system simulator interface with pipes, pumps, and temperature values.
|
||||
|
|
|
|||
28
src/content/projects/perfect-postcode.md
Normal file
28
src/content/projects/perfect-postcode.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
title: Perfect Postcode
|
||||
description: A UK property-intelligence map. ~25M historical transactions, ~150 features per row, all u16-quantised in RAM, served from a single Rust binary.
|
||||
thumbnail:
|
||||
src: ./_assets/perfect-postcode.jpg
|
||||
alt: The Perfect Postcode dashboard with active filters on property type, price, transit time, and crime, showing a Manchester map with matching properties as a heatmap.
|
||||
period: '2026'
|
||||
sortDate: 2026-05-01
|
||||
technologies:
|
||||
[
|
||||
'Rust',
|
||||
'Axum',
|
||||
'Polars',
|
||||
'h3o',
|
||||
'rayon',
|
||||
'PocketBase',
|
||||
'PMTiles',
|
||||
'MapLibre',
|
||||
'deck.gl',
|
||||
'Conveyal R5',
|
||||
'Gemini',
|
||||
]
|
||||
selected: true
|
||||
essay: perfect-postcode-rust-property-server
|
||||
links:
|
||||
- label: Site
|
||||
url: https://perfect-postcode.co.uk
|
||||
---
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Photo Site Generator
|
||||
description: A static photo site generated from a directory of images, with automatic resizing to multiple quality settings.
|
||||
description: Point a Webpack script at a folder of photos, get a static site with responsive image variants. An excuse to walk with a camera.
|
||||
thumbnail:
|
||||
src: ./_assets/photos.jpg
|
||||
alt: Screenshot of a generated photography site.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Platform Game
|
||||
description: An early 3D game in C with SDL 1.2, random maps, destructible voxels, enemies, powerups, and time slowdown.
|
||||
description: My Basics of Programming project. 3D voxel game in C and SDL 1.2. Pointers, learned painfully.
|
||||
thumbnail:
|
||||
src: ./_assets/platform-game.jpg
|
||||
alt: Screenshot from an early 3D platform game.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: reconcile-text
|
||||
description: A Rust library that auto-resolves conflicting text edits without conflict markers, with WebAssembly and Python bindings.
|
||||
description: One Rust core, three packages. Merges Markdown notes from three editors I don't control, with no operation history. Never emits markers.
|
||||
thumbnail:
|
||||
src: ./_assets/reconcile.png
|
||||
alt: The reconcile-text logo and tagline "Conflict-free 3-way text merging".
|
||||
period: '2025'
|
||||
sortDate: 2025-05-01
|
||||
technologies: ['Rust', 'WebAssembly', 'Python', 'pyo3', 'Operational Transformation']
|
||||
technologies: ['Rust', 'WebAssembly', 'Python', 'pyo3', 'wasm-bindgen', 'Myers diff']
|
||||
selected: true
|
||||
essay: reconcile-text-3-way-merge
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: SDF-2D
|
||||
description: A browser rendering library for optimized 2D ray tracing with signed distance fields.
|
||||
description: A browser 2D ray-tracer tuned for the phone in your pocket. Tile-based passes, deferred shading, shaders generated per scene and device.
|
||||
thumbnail:
|
||||
src: ./_assets/sdf2d.jpg
|
||||
alt: SDF-2D browser demo with soft lighting effects.
|
||||
period: 'Autumn-Winter 2020'
|
||||
sortDate: 2020-12-01
|
||||
technologies: ['TypeScript', 'WebGL', 'WebGL2', 'SDF rendering']
|
||||
technologies: ['TypeScript', 'WebGL', 'WebGL2', 'Signed distance fields']
|
||||
selected: true
|
||||
essay: sdf-2d-ray-tracing
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: Life Towers
|
||||
description: A multi-device goal tracker where the lasting idea was syncing state with immutable tries.
|
||||
description: A multi-device goal tracker. The trie underneath made the sync diff free; the towers were just the UI.
|
||||
thumbnail:
|
||||
src: ./_assets/towers.jpg
|
||||
alt: Life Towers goal tracking interface with tower-like visual structures.
|
||||
period: 'August-September 2019'
|
||||
sortDate: 2019-09-01
|
||||
technologies: ['Python', 'Angular', 'State synchronization']
|
||||
technologies: ['Python', 'Angular', 'TypeScript', 'Immutable trie']
|
||||
selected: true
|
||||
essay: life-towers-immutable-tries
|
||||
links:
|
||||
|
|
|
|||
29
src/content/projects/vault-link.md
Normal file
29
src/content/projects/vault-link.md
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
title: VaultLink
|
||||
description: 'I refuse to give up the editor: Obsidian, Vim, VS Code, sed. Self-hosted sync that survives all four, built on reconcile-text underneath.'
|
||||
thumbnail:
|
||||
src: ./_assets/vault-link.svg
|
||||
alt: 'The VaultLink logo: a chain-link mark in a soft gradient.'
|
||||
period: '2025-2026'
|
||||
sortDate: 2025-12-01
|
||||
technologies:
|
||||
[
|
||||
'Rust',
|
||||
'axum',
|
||||
'sqlx',
|
||||
'SQLite',
|
||||
'WebSockets',
|
||||
'TypeScript',
|
||||
'Obsidian plugin',
|
||||
'ts-rs',
|
||||
'wasm-bindgen',
|
||||
'reconcile-text',
|
||||
]
|
||||
selected: true
|
||||
essay: vault-link-obsidian-sync
|
||||
links:
|
||||
- label: Source
|
||||
url: https://github.com/schmelczer/vault-link
|
||||
- label: Docs
|
||||
url: https://vault-link.schmelczer.dev
|
||||
---
|
||||
Loading…
Add table
Add a link
Reference in a new issue