Website source-code.
  • CSS 55.3%
  • HTML 33%
  • JavaScript 10%
  • Makefile 1.7%
Find a file
2026-08-10 16:13:38 -03:00
assets 🐛 Fix table styling 2026-08-10 16:13:38 -03:00
content 🐛 Fix tables in post 2026-08-10 16:10:27 -03:00
i18n ✨ Add telemetry tags and footer console 2026-06-30 13:31:27 -03:00
layouts ✨ Add telemetry tags and footer console 2026-06-30 13:31:27 -03:00
static ✨ Add leap seconds indices 2026-08-01 18:40:25 -03:00
.gitattributes 🔧 Apply many improvements from Claude Opus 2026-06-28 20:23:07 -03:00
.gitignore 🔧 Add .gitignore for Hugo + OS junk 2026-06-28 20:23:03 -03:00
hugo.toml ✨ Enable localized taxonomy term pages 2026-06-28 20:23:03 -03:00
Makefile 🔧 Improve makefile help 2026-08-01 18:40:15 -03:00
README.md 📚 Add README.md 2026-06-28 21:26:09 -03:00

ronanarraes.com

Personal website of Ronan Arraes Jardim Chagas, hosted at https://ronanarraes.com. The site is a static site generated with Hugo and is fully bilingual (English and Portuguese).

Repository layout

.
├── content/
│   ├── en/                      # English content
│   │   ├── _index.md            # Homepage (English)
│   │   ├── about-me.md          # Biography
│   │   ├── publications.md      # Publications list
│   │   └── posts/               # Blog posts (English)
│   └── pt/                      # Portuguese content (mirror of en/)
├── layouts/                     # Hugo templates and shortcodes
├── assets/                      # Images, CSS, JS processed by Hugo
├── static/                      # Files served as-is at the site root
├── i18n/                        # UI translations
├── hugo.toml                    # Hugo configuration
├── Makefile                     # Build / serve / deploy shortcuts
└── public/                      # Generated site (gitignored)

Every piece of content lives under content/<lang>/..., where <lang> is either en or pt. To change a page, edit the file under the matching language directory. Do not duplicate content across languages without translating it.

Prerequisites

  • Hugo (extended edition)
  • make
  • rsync (only required for make push)
  • ssh access to ronan.arraes@ronanarraes.com (only required for make push)

Using the Makefile

The Makefile is the entry point for every common workflow. Run make help to print the available targets:

$ make help

make build

Builds the site into the public/ directory using hugo --minify. Use this to verify the site compiles locally before deploying.

make server

Starts hugo server with live reload and opens http://localhost:1313 in the default browser. Use this while writing content or tweaking templates.

make clean

Removes all build artifacts (public/, resources/, and .hugo_build.lock). Run this if the build gets into a weird state.

make push

Builds the site and synchronizes public/ to the production server using rsync --delete. The target server, user, and remote path are hard-coded at the top of the Makefile:

REMOTE_USER = ronan.arraes
REMOTE_HOST = ronanarraes.com
REMOTE_DIR  = /storage/website

Adjust those variables if your environment differs. Because of the --delete flag, make push will remove remote files that are no longer present locally — double-check before pushing.

Adding a new post

Posts are Hugo page bundles: each post is a folder that contains an index.md and any images or attachments used by the post.

Folder naming convention

Every post folder follows the pattern:

YYYY-MM-DD-slug
  • YYYY-MM-DD is the publication date, used purely for on-disk organization and sorting. The canonical date still comes from the front matter date field.
  • slug is a short, lowercase, hyphen-separated identifier (e.g. julia-for-orbit-propagation).

Concrete examples:

content/en/posts/2026-06-28-introducing-my-new-website/
content/pt/posts/2026-06-28-apresentando-meu-novo-site/

Creating a post

  1. Create the folder under the appropriate language directory:

    mkdir -p content/en/posts/2026-06-28-my-new-post
    
  2. Create index.md inside it with the required front matter:

    ---
    title: "My new post"
    description: "One-line summary used in listings and meta tags."
    date: 2026-06-28
    draft: false
    tags: ["julia", "space"]
    ---
    
    Post body goes here. Markdown, with the usual Hugo shortcodes
    available (e.g. `{{< figure src="fig1.png" >}}`).
    
  3. Drop any images or assets referenced by the post next to index.md. They will be picked up automatically by Hugo's page bundle machinery.

  4. Preview the result with make server.

Translated posts

When a post is available in both languages, create matching folders under each language directory using the same date and slug:

content/en/posts/2026-06-28-my-new-post/index.md
content/pt/posts/2026-06-28-meu-novo-post/index.md

The slugs may differ per language, but keeping the YYYY-MM-DD prefix identical makes it easy to pair the two versions.

Conventions

  • Keep all user-facing strings in the correct language directory.
  • Use the shortcodes in layouts/shortcodes/ ({{< figure >}}, {{< code-window >}}, {{< katex >}}, etc.) instead of inline HTML when possible.
  • Math is enabled via the KaTeX shortcode and Goldmark passthrough delimiters ($$...$$, \[...\], \(...\)).
  • Do not edit public/ by hand — it is regenerated on every build.