Update Guide
How to edit and deploy victorgalvez.dev
The site is an Astro static site served from /var/www/stdout/ on the VPS.
Source lives at ~/Documents/me/stdout/ locally.
Every update is: edit file → build → rsync.
Quick deploy
After any edit, run this from the stdout/site directory:
# 1. Build
cd ~/Documents/me/stdout/site
npm run build
# 2. Sync to VPS
rsync -avz --delete dist/ root@204.168.213.63:/var/www/stdout/
# Verify
curl -sI https://victorgalvez.dev | head -3 Caddy serves from /var/www/stdout/ — no restart needed. Changes are live immediately after rsync.
Site map
Every route and where its data lives:
| Route | Edit this file | Content |
|---|---|---|
| /uses | site/src/pages/uses.astro | Hardware, dev tools, AI workflow, terminal setup |
| /now | content/now.md | Current focus, projects, reading, obsessions |
| /writing | content/writing/*.md | Blog posts, essays, notes |
| / | content/hero.json | Name, role, tagline, stack chips, links |
| /repos | content/repos.json | Curated GitHub repos (manual or synced) |
| /about | content/about.md | Bio, background, contact |
| /books | site/src/pages/books.astro | Reading list (inline in page) |
| /bookmarks | site/src/pages/bookmarks.astro | Saved links (inline in page) |
| /radar | site/src/pages/radar/ | Tech radar — adopt/trial/assess/hold |
Uses page /uses
File: site/src/pages/uses.astro — data is in arrays at the top of the file.
Each section is an array of objects. To add or update a tool, edit the relevant array. Sections: hardware, dev, ai, design, terminal.
// Example: add a new item to the dev array
const dev = [
// ... existing items ...
{
name: 'New Tool',
desc: 'What it does and why I use it',
tag: 'category',
tagColor: '#2DD4BF',
// Optional: link: 'https://...' — makes the card clickable
},
]; hardware #4ADE80 · dev #2DD4BF · ai #A78BFA · design #F472B6 · terminal #FACC15 Now page /now
File: content/now.md — plain Markdown, rendered automatically.
# Now
*Last updated: Month DD, YYYY*
## Building
What you're working on right now.
## Learning
- Item one
- Item two
## Reading
- *Book Title* by Author — short note
## Obsessed with
The idea or thing consuming your mental bandwidth. ## Section) become sidebar entries automatically. Writing /writing
Directory: content/writing/ — one .md file per post.
---
title: Post Title
date: "2026-04-05"
readingTime: 5 # minutes, estimate manually
tags: [technical] # technical | life | philosophy | ship-log
draft: false # true = hidden from listing
---
Full post content in Markdown.
## Section heading
Paragraphs, lists, code blocks — standard Markdown. draft: true are built but not listed. The homepage shows the 2 most recent non-draft posts. Home / Hero /
File: content/hero.json — controls the homepage intro block.
{
"name": "Victor Galvez",
"role": "Software Engineer",
"tagline": "I build things and ship them. Currently building in public.",
"stack": ["TypeScript", "React Native", "Next.js", "NestJS", "Node.js"],
"links": {
"github": "https://github.com/victorgalvez56",
"email": "hello@victorgalvez.dev"
}
} Repos /repos
File: content/repos.json — curated GitHub repos shown on the repos page.
{
"curatedRepos": [
{
"name": "repo-name",
"description": "What it does",
"url": "https://github.com/victorgalvez56/repo-name",
"stars": 0,
"language": "TypeScript",
"topics": ["tag1", "tag2"]
}
],
"publicRepos": [], // auto-synced by bot (do not edit manually)
"lastSync": null
} About /about
File: content/about.md — plain Markdown, rendered as the about page.
Claude workflow
Tell Claude what to add or change — it knows the file structure and will edit, build, and deploy.
Claude will edit the right file, run npm run build, sync with rsync, and confirm the live URL.