Bilingual portfolio website built with semantic HTML, modern CSS, and vanilla JavaScript
Project documentation is centralized in this README for faster onboarding and maintenance.
Related repositories:
This project is a static bilingual portfolio (pt-BR/en) with a technical blog and SEO-focused content architecture.
- Public URL:
https://nullcipherr.github.io/ - Main entrypoint:
index.html - Blog entrypoint:
blog/index.html
NullCipherr.github.io is a professional portfolio website designed for discoverability, performance, and conversion.
The project prioritizes:
- Semantic structure and accessibility-first HTML;
- Clear visual hierarchy and responsive layout behavior;
- Lightweight runtime with vanilla JavaScript;
- Built-in i18n workflow with locale JSON dictionaries;
- Technical content strategy through pillar articles and blog navigation.
Blog content is now consumed from the external portfolio-blog repository through GitHub Raw URLs.
- Bilingual interface with runtime switch (
pt-BRanden). - Hero + showcase flow with direct navigation to portfolio variants.
- Structured sections for experience, skills, projects, content, FAQ, and contact.
- Technical blog with external CMS data (
portfolio-blog) and dynamic article rendering. - Performance-minded media loading for hero background video/image.
- SEO foundation with metadata, Open Graph, robots, sitemap, and JSON-LD schema.
High-level application flow:
index.htmlrenders the full portfolio experience and section layout.css/style.cssprovides the global design system and responsive behavior.js/script.jscontrols interactions (mobile menu, smooth scroll, observer effects, i18n, hero media strategy).locales/*.jsonstores translation keys and copy contracts.blog/index.htmlloads article metadata fromhttps://raw.githubusercontent.com/NullCipherr/portfolio-blog/main/posts/index.json.blog/post.htmlresolvesslugand renders Markdown fromportfolio-blog/posts/*.md.- Legacy paths in
blog/artigos/*.htmlredirect to the new dynamic route for backward compatibility. robots.txtandsitemap.xmlsupport crawl/index pipelines.404.htmlhandles invalid routes in static hosting.
Current optimization choices:
- Static architecture with no framework runtime overhead;
- Lazy strategy for heavy hero media when applicable;
- Reduced-motion and save-data checks in JavaScript behavior;
- Optimized asset formats (
webp, compressed video variants); - Minimal dependency surface (no external JS framework required).
- Vanilla stack for maximal control and low operational complexity.
- Locale dictionaries decoupled from markup for maintainable i18n.
- Single-page + content hub model to combine branding and technical authority.
- SEO as baseline, not afterthought, through metadata and structured data.
- Expand technical blog cadence with new long-form pillar articles.
- Add automated lint/validation workflow for HTML/CSS/SEO checks.
- Improve image/video optimization pipeline for content publishing.
- Add richer conversion tracking and observability for content funnels.
- Markup: HTML5
- Styling: CSS3
- Runtime: Vanilla JavaScript
- Localization: JSON locale dictionaries
- Hosting: GitHub Pages
.
├── assets/
│ ├── images/
│ └── videos/
├── blog/
│ ├── index.html
│ ├── post.html
│ └── artigos/ (legacy redirects)
├── css/
│ ├── style.css
│ └── blog.css
├── js/
│ ├── script.js
│ ├── blog-index.js
│ └── blog-post.js
├── locales/
│ ├── pt-br.json
│ └── en.json
├── 404.html
├── index.html
├── robots.txt
├── sitemap.xml
└── README.md
- Python 3 (or any static file server)
python3 -m http.server 8080Open http://localhost:8080.
This repository does not require runtime environment variables.
Not applicable (no Node-based runtime required to serve the project).
Deployment is currently managed through GitHub Pages configuration.
Recommended next step:
- Add GitHub Actions for static checks and deployment verification.
Primary deployment target: GitHub Pages.
git push origin mainAfter pushing, validate:
- Public URL availability;
robots.txtandsitemap.xmlaccess;404.htmlfallback behavior;- i18n toggle behavior on production.
Follow the license configured for this repository.