feat(as-servicos): remove o link do site e cita a participacao no projeto

- demoUrl de AS Servicos passa a null (so o codigo no GitHub); teamSize deixa de ser 'Individual'
- novo campo opcional role: 'Desenvolvimento da primeira landing page do site, com animacoes 3D, e de um painel para controle de projetos'
- role aparece no card de projeto e no topo do case

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
Evandro Fonseca JuniorandClaude Sonnet 5.5 committed 2026-10-04 23:54:43 -03:00
1 parent 4db4b1f71c
commit 2c032b68af
5 files changed
+31 -3

No files matched your search

+8
View File
@@ -109,6 +109,14 @@ export default async function CasePage({ params }: CasePageProps) {
<p className="ds-copy max-w-[68ch] !text-[rgba(255,255,255,.78)]"> <p className="ds-copy max-w-[68ch] !text-[rgba(255,255,255,.78)]">
{caseStudy.detail?.answer.text ?? caseStudy.summary} {caseStudy.detail?.answer.text ?? caseStudy.summary}
</p> </p>
{caseStudy.role ? (
<p className="ds-copy max-w-[68ch] !text-[rgba(255,255,255,.78)]">
<strong className="font-semibold text-white">
Minha participação:
</strong>{" "}
{caseStudy.role}
</p>
) : null}
{!caseStudy.detail ? ( {!caseStudy.detail ? (
<p className="mt-sp-6 text-[15px] leading-8 text-white"> <p className="mt-sp-6 text-[15px] leading-8 text-white">
{caseStudy.impact} {caseStudy.impact}
+6
View File
@@ -91,6 +91,12 @@ export default function Projects({
<p className="ds-copy">{caseStudy.impact}</p> <p className="ds-copy">{caseStudy.impact}</p>
</div> </div>
)} )}
{caseStudy?.role && (
<div className="mt-sp-4 border-l border-[var(--slash)] pl-sp-4">
<p className="ds-kicker">Minha participação</p>
<p className="ds-copy">{caseStudy.role}</p>
</div>
)}
<ul className="ds-tags mt-sp-6" data-reel-stagger="fade"> <ul className="ds-tags mt-sp-6" data-reel-stagger="fade">
{project.technologies.slice(0, 5).map((tech) => ( {project.technologies.slice(0, 5).map((tech) => (
+11
View File
@@ -96,3 +96,14 @@ it("does not publish the unavailable Twins Lab demo", () => {
caseStudies.find((item) => item.id === "twins-lab")?.demoUrl, caseStudies.find((item) => item.id === "twins-lab")?.demoUrl,
).toBeUndefined(); ).toBeUndefined();
}); });
it("keeps AS Serviços as a project (code only) and states the author's participation", () => {
const asServicos = caseStudies.find(({ id }) => id === "as-servicos");
expect(asServicos?.demoUrl).toBeNull();
expect(asServicos?.githubUrl).toBe(
"https://github.com/evandrodevbr/as-servicos",
);
expect(asServicos?.role).toMatch(/primeira landing page/i);
expect(asServicos?.role).toMatch(/animações 3D/i);
expect(asServicos?.role).toMatch(/painel para controle de projetos/i);
});
+4 -1
View File
@@ -75,6 +75,8 @@ export interface CaseStudyContent {
stack: string[]; stack: string[];
demoUrl?: string | null; demoUrl?: string | null;
githubUrl?: string | null; githubUrl?: string | null;
/** Papel do autor quando o projeto não é só dele (texto editorial, sem fonte pública). */
role?: string;
detail?: CaseStudyDetail; detail?: CaseStudyDetail;
} }
@@ -659,8 +661,9 @@ export const caseStudies: CaseStudyContent[] = [
impact: impact:
"Representar engenharia física e software na mesma narrativa visual sem depender de um modelo 3D pronto.", "Representar engenharia física e software na mesma narrativa visual sem depender de um modelo 3D pronto.",
stack: ["Next.js 16", "Three.js", "TypeScript"], stack: ["Next.js 16", "Three.js", "TypeScript"],
demoUrl: "https://asservicos.com", demoUrl: null,
githubUrl: "https://github.com/evandrodevbr/as-servicos", githubUrl: "https://github.com/evandrodevbr/as-servicos",
role: "Desenvolvimento da primeira landing page do site, com animações 3D, e de um painel para controle de projetos.",
detail: { detail: {
answer: { answer: {
text: "Site institucional em Next.js 16 que representa quatro frentes de engenharia com uma cena Three.js gerada em código: uma casa wireframe e uma placa-mãe ligadas ao progresso da rolagem.", text: "Site institucional em Next.js 16 que representa quatro frentes de engenharia com uma cena Three.js gerada em código: uma casa wireframe e uma placa-mãe ligadas ao progresso da rolagem.",
+2 -2
View File
@@ -264,13 +264,13 @@
"category": "web", "category": "web",
"level": "senior", "level": "senior",
"status": "Código público", "status": "Código público",
"demoUrl": "https://asservicos.com", "demoUrl": null,
"githubUrl": "https://github.com/evandrodevbr/as-servicos", "githubUrl": "https://github.com/evandrodevbr/as-servicos",
"badges": ["Three.js", "WebGL", "Código público"], "badges": ["Three.js", "WebGL", "Código público"],
"featured": true, "featured": true,
"metrics": { "metrics": {
"complexity": 5, "complexity": 5,
"teamSize": "Individual" "teamSize": "Em equipe"
} }
} }
], ],