1- "use client" ;
2-
3- import { useState } from "react" ;
41import 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)]" > ></ 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)]" > ></ 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)]" > ></ 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 >
0 commit comments