• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
project logo

nmsilva

my-portfolio

Starter template for a markdown blog
Public
Like
my-portfolio
Home
Code
5
docs
4
posts
2
Layout.tsx
README.md
H
index.tsx
Environment variables
Branches
1
Pull requests
Remixes
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
docs
/
implementation.md
Code
/
docs
/
implementation.md
Search
…
Viewing readonly version of main branch: v19
View latest version
implementation.md

Implementação Actual

O index.tsx é um HTTP val em Deno com React Server-Side Rendering (SSR). Tudo renderizado no servidor — sem JS no cliente.


Stack

CamadaTecnologia
RuntimeDeno (Val Town)
UIReact 18.2 (SSR via renderToString)
i18nrosetta (EN + PT)
StylingCSS inline (custom, sem framework)
RoutingManual (pathname matching)
MarkdownRenderer próprio (regex-based)

Funcionalidades Implementadas

1. i18n Completo (EN/PT)

  • rosetta para traduções
  • Detecção automática via ?lang= param ou Accept-Language header
  • Toggle EN/PT na sidebar e em cada post
  • Todos os textos, labels e bio traduzidos

2. Perfil Real

profile = { name: "Nuno Silva", initials: "NS", location: { en: "Alcofra, Portugal", pt: "Alcofra, Portugal" }, email: "nuno4slb@gmail.com", github: "https://github.com/nmsilva", valtown: "https://www.val.town/u/nmsilva", }

3. Projectos Reais

  • Dragonboat — Product Roadmap Platform (Node.js, React, TypeScript, PostgreSQL)
  • fbref Football Data Pipeline — Cron + AI enrichment + REST API
  • Crypto & Real Estate Trackers — Monitores de preços com alertas

4. Blog com Posts Reais

4 posts completos em EN/PT com conteúdo técnico:

SlugTítuloTags
orm-vs-raw-sqlWhy I stopped using ORMNode.js, PostgreSQL, Backend
valtown-scratchpadVal.town is the scratchpad I always wantedVal.town, TypeScript
react-server-components-one-year-inReact Server Components — one year inReact, Frontend, Performance
football-stats-pipelineBuilding a real-time football stats pipelineAI, TypeScript, Data Engineering

Posts com: title EN/PT, excerpt EN/PT, read time, tags, conteúdo completo em Markdown.

5. Routing

RotaComportamento
/Página principal (homepage)
/posts/{slug}Post individual
?lang=en|ptOverride de idioma

6. Contacto

Sem formulário — links directos:

  • ✉️ Email: nuno4slb@gmail.com
  • 🐙 GitHub: github.com/nmsilva
  • 🏔️ Val.town: val.town/u/nmsilva

7. Layout Responsivo

  • Sidebar sticky em desktop (≥1024px)
  • Mobile header com avatar, role, nav pills e bio
  • Breakpoints: max-width: 1024px, max-width: 640px

8. Skills (Toolbox)

12 tecnologias com emoji icons: Node.js, React, TypeScript, PostgreSQL, MongoDB, Docker, AWS, Git, REST APIs, GraphQL, Redis, Jest

9. Renderizador Markdown Próprio

  • Code blocks (```) → <pre><code>
  • ## headings → <h2>
  • **bold** → <strong>
  • [link](url) → <a>
  • Backtick inline code → <code>
  • Parágrafos automáticos

Outros Ficheiros do Projecto

FicheiroTipoDescrição
Layout.tsxscriptLayout component básico (classless.css) — não usado pelo index.tsx principal
posts/001-first-post.md-Post exemplo (não usado pelo index.tsx)
posts/002-second-post.md-Post exemplo (não usado pelo index.tsx)
README.md-README do projecto (template original)

URL de Produção

https://nmsilva--019cdcc1687b73e8a526d410d2c5adc7.web.val.run


Limitações Actuais

  • Sem hit counter (foi removido vs. versão antiga)
  • Markdown renderer básico (não usa marked)
  • Posts hardcoded no index.tsx (não lê ficheiros .md do projecto)
  • Sem favicon
  • Sem meta tags Open Graph
  • Sem RSS feed
FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
© 2026 Val Town, Inc.