Skip to content

Commit ad15658

Browse files
committed
feat(cripto): onchain builds, terminal contact and web3 socials
- Selected builds: replace Trust Finance and bot-discord with Gnars and BuilderDAO (onchain/Nounish contributions) - Contact: drop the mailto form for a terminal-style window that lists onchain socials and opens a Warpcast cast composer as the main CTA - Socials: LinkedIn out, GitHub/X/Farcaster/PeakD in (centralized in contactSocials); remove the exposed email from the footer marquee
1 parent 13b2ec5 commit ad15658

3 files changed

Lines changed: 97 additions & 92 deletions

File tree

app/cripto/_components/CriptoContact.tsx

Lines changed: 62 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
1-
"use client";
2-
3-
import { useState } from "react";
41
import Window from "./Window";
2+
import { contactSocials } from "../_data";
53

6-
const EMAIL = "matheuslouzadaa@gmail.com";
7-
8-
export default function CriptoContact() {
9-
const [name, setName] = useState("");
10-
const [from, setFrom] = useState("");
11-
const [msg, setMsg] = useState("");
4+
const fcHandle =
5+
contactSocials.find((s) => s.label === "Farcaster")?.handle.replace(/^@/, "") ??
6+
"louzoshi";
127

13-
const submit = (e: React.FormEvent) => {
14-
e.preventDefault();
15-
const subject = encodeURIComponent(`Contato onchain — ${name || "sem nome"}`);
16-
const body = encodeURIComponent(
17-
`${msg}\n\n— ${name}\n${from}`
18-
);
19-
window.location.href = `mailto:${EMAIL}?subject=${subject}&body=${body}`;
20-
};
8+
// Opens the Warpcast composer with a message already mentioning me —
9+
// the onchain equivalent of the old contact form.
10+
const castHref = `https://warpcast.com/~/compose?text=${encodeURIComponent(
11+
`gm @${fcHandle} 👋`
12+
)}`;
2113

14+
export default function CriptoContact() {
2215
return (
2316
<section
2417
id="contato"
@@ -27,71 +20,73 @@ export default function CriptoContact() {
2720
<div className="max-w-[1160px] mx-auto px-5 py-20 grid md:grid-cols-[0.9fr_1.1fr] gap-10 items-center">
2821
<div className="text-[var(--c-white)]">
2922
<p className="c-label mb-3 !text-[var(--c-white)]/70">
30-
[ 05 — new_message.exe ]
23+
[ 05 — reach_out.sh ]
3124
</p>
3225
<h2 className="c-display text-[clamp(30px,5.4vw,58px)]">
3326
Bora
3427
<br />
3528
construir?
3629
</h2>
3730
<p className="c-mono text-[13px] leading-[1.7] mt-5 max-w-[360px] text-[var(--c-white)]/80">
38-
Colaboração, contribuição ou uma ideia onchain — respondo tudo que
39-
for sério.
31+
Colaboração, contribuição ou uma ideia onchain? Me acha no Farcaster —
32+
ou em qualquer um dos canais aí do lado.
4033
</p>
41-
<div className="flex flex-wrap gap-3 mt-7">
42-
<a
43-
href="https://github.com/mtlouzada"
44-
target="_blank"
45-
rel="noopener noreferrer"
46-
className="c-tag !border-[var(--c-white)] !text-[var(--c-white)] !bg-transparent"
47-
>
48-
GITHUB
49-
</a>
50-
<a
51-
href="https://www.linkedin.com/in/matheus-louzadaa/"
52-
target="_blank"
53-
rel="noopener noreferrer"
54-
className="c-tag !border-[var(--c-white)] !text-[var(--c-white)] !bg-transparent"
55-
>
56-
LINKEDIN
57-
</a>
58-
<span className="c-tag !border-[var(--c-lime)] !text-[var(--c-lime)] !bg-transparent">
59-
LOUZOSHI.ETH
60-
</span>
61-
</div>
34+
<span className="c-tag mt-7 !border-[var(--c-lime)] !text-[var(--c-lime)] !bg-transparent">
35+
◆ LOUZOSHI.ETH
36+
</span>
6237
</div>
6338

6439
<Window
6540
title="new_message.exe — LOUZOSHI"
6641
accent="--c-red"
67-
bodyClassName="p-6 bg-[var(--c-paper)]"
42+
bodyClassName="p-6 bg-[var(--c-void)]"
6843
>
69-
<form onSubmit={submit} className="flex flex-col gap-4">
70-
<div className="grid grid-cols-2 gap-4">
71-
<input
72-
className="c-field"
73-
placeholder="nome"
74-
value={name}
75-
onChange={(e) => setName(e.target.value)}
76-
/>
77-
<input
78-
className="c-field"
79-
type="email"
80-
placeholder="you@email.com"
81-
value={from}
82-
onChange={(e) => setFrom(e.target.value)}
83-
/>
44+
<div className="c-mono text-[12.5px] leading-[1.85] text-[var(--c-white)]">
45+
<p>
46+
<span className="text-[var(--c-lime)]">&gt;</span> whoami
47+
</p>
48+
<p className="text-[var(--c-white)]/60 mb-3">louzoshi.eth</p>
49+
50+
<p>
51+
<span className="text-[var(--c-lime)]">&gt;</span> socials --list
52+
</p>
53+
<div className="mt-1 mb-3">
54+
{contactSocials.map((s) => (
55+
<a
56+
key={s.label}
57+
href={s.href}
58+
target="_blank"
59+
rel="noopener noreferrer"
60+
className="group flex items-center gap-2 py-0.5 hover:text-[var(--c-lime)] transition-colors"
61+
>
62+
<span className="w-[92px] shrink-0 text-[var(--c-white)]/40 lowercase">
63+
{s.label}
64+
</span>
65+
<span className="text-[var(--c-white)]/85 group-hover:text-[var(--c-lime)] transition-colors">
66+
{s.handle}
67+
</span>
68+
<span className="ml-auto opacity-0 group-hover:opacity-100 transition-opacity">
69+
70+
</span>
71+
</a>
72+
))}
8473
</div>
85-
<textarea
86-
className="c-field min-h-[110px] resize-y"
87-
placeholder="conta a ideia..."
88-
value={msg}
89-
onChange={(e) => setMsg(e.target.value)}
90-
/>
91-
<button type="submit" className="c-btn c-btn-red self-start">
92-
Enviar mensagem →
93-
</button>
94-
</form>
74+
75+
<p className="flex items-center">
76+
<span className="text-[var(--c-lime)]">&gt;</span>
77+
<span className="ml-2">reach_out</span>
78+
<span className="blink" />
79+
</p>
80+
</div>
81+
82+
<a
83+
href={castHref}
84+
target="_blank"
85+
rel="noopener noreferrer"
86+
className="c-btn c-btn-red mt-5"
87+
>
88+
Cast @{fcHandle}
89+
</a>
9590
</Window>
9691
</div>
9792
</section>

app/cripto/_components/CriptoFooter.tsx

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import Link from "next/link";
22
import Ticker from "./Ticker";
3+
import { contactSocials } from "../_data";
34

45
const footerItems = [
56
"LET'S BUILD SOMETHING",
6-
"MATHEUSLOUZADAA@GMAIL.COM",
7+
"SKATE OR DAO",
78
"LOUZOSHI.ETH",
89
"ART",
910
"TECH",
@@ -24,22 +25,17 @@ export default function CriptoFooter() {
2425
<Link href="/" className="hover:text-[var(--c-lime)] transition-colors">
2526
← Portfólio
2627
</Link>
27-
<a
28-
href="https://github.com/mtlouzada"
29-
target="_blank"
30-
rel="noopener noreferrer"
31-
className="hover:text-[var(--c-lime)] transition-colors"
32-
>
33-
GitHub
34-
</a>
35-
<a
36-
href="https://www.linkedin.com/in/matheus-louzadaa/"
37-
target="_blank"
38-
rel="noopener noreferrer"
39-
className="hover:text-[var(--c-lime)] transition-colors"
40-
>
41-
LinkedIn
42-
</a>
28+
{contactSocials.map((s) => (
29+
<a
30+
key={s.label}
31+
href={s.href}
32+
target="_blank"
33+
rel="noopener noreferrer"
34+
className="hover:text-[var(--c-lime)] transition-colors"
35+
>
36+
{s.label}
37+
</a>
38+
))}
4339
</div>
4440
<p className="c-mono text-[10px] tracking-[0.1em] text-[var(--c-white)]/50 w-full md:w-auto">
4541
© {new Date().getFullYear()} MATHEUS LOUZADA · ONCHAIN MODE

app/cripto/_data.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,19 @@ export const contributions: Contribution[] = [
6565
},
6666
{
6767
index: "03",
68-
title: "Trust Finance",
69-
meta: ".NET · REACT",
70-
role: "Autor",
71-
href: "https://github.com/mtlouzada/Trust-Finance",
68+
title: "Gnars",
69+
meta: "SKATE DAO · ONCHAIN",
70+
role: "Contribuidor",
71+
href: "https://gnars.com",
7272
accent: "--c-teal",
7373
font: "display",
7474
},
7575
{
7676
index: "04",
77-
title: "bot-discord",
78-
meta: "NODE · DISCORD API",
79-
role: "Autor",
80-
href: "https://github.com/mtlouzada/bot-discord",
77+
title: "BuilderDAO",
78+
meta: "NOUNS BUILDER · DAO",
79+
role: "Contribuidor",
80+
href: "https://nouns.build",
8181
accent: "--c-lime",
8282
font: "mono",
8383
},
@@ -122,3 +122,17 @@ export const disciplines = {
122122
],
123123
},
124124
};
125+
126+
// Onchain-native socials (used in the crypto contact terminal + footer).
127+
export const contactSocials = [
128+
{ label: "GitHub", handle: "mtlouzada", href: "https://github.com/mtlouzada" },
129+
// TODO: confirmar handle do X (assumido: louzoshi)
130+
{ label: "X", handle: "@louzoshi", href: "https://x.com/louzoshi" },
131+
// TODO: confirmar handle do Farcaster (assumido: louzoshi)
132+
{
133+
label: "Farcaster",
134+
handle: "@louzoshi",
135+
href: "https://warpcast.com/louzoshi",
136+
},
137+
{ label: "PeakD", handle: "@louzoshi", href: "https://peakd.com/@louzoshi" },
138+
];

0 commit comments

Comments
 (0)