- CSS 55.3%
- HTML 33%
- JavaScript 10%
- Makefile 1.7%
| assets | ||
| content | ||
| i18n | ||
| layouts | ||
| static | ||
| .gitattributes | ||
| .gitignore | ||
| hugo.toml | ||
| Makefile | ||
| README.md | ||
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)
makersync(only required formake push)sshaccess toronan.arraes@ronanarraes.com(only required formake 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-DDis the publication date, used purely for on-disk organization and sorting. The canonical date still comes from the front matterdatefield.slugis 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
-
Create the folder under the appropriate language directory:
mkdir -p content/en/posts/2026-06-28-my-new-post -
Create
index.mdinside 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" >}}`). -
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. -
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.