Skip to content

Commit d6bd657

Browse files
authored
Merge pull request #3 from deco-sites/danielfurt/activation-form
feat: add multi-step activation form page at /ativacao
2 parents c8e26e3 + b5b518a commit d6bd657

11 files changed

Lines changed: 999 additions & 43 deletions

File tree

.deco/blocks/pages-ativacao.json

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"name": "Ativação",
3+
"path": "/ativacao",
4+
"sections": [
5+
{
6+
"__resolveType": "site/sections/ActivationForm.tsx",
7+
"intro": {
8+
"title": "Ativação",
9+
"subtitle": "Ativação confirmada.",
10+
"paragraphs": [
11+
"Nós somos o movimento de regeneração oceânica e agora você acabou de entrar no grupo que vai estar com o Deriva desde o início.",
12+
"Antes de qualquer anúncio público, antes de qualquer lançamento oficial.",
13+
"Mas pra isso funcionar de verdade, precisamos entender melhor quem você é e como a gente pode construir isso juntos."
14+
],
15+
"callToAction": "Vamos lá?",
16+
"buttonText": "COMEÇAR"
17+
},
18+
"identity": {
19+
"title": "Quem é você?",
20+
"nameField": {
21+
"label": "Nome",
22+
"placeholder": "Seu nome"
23+
},
24+
"emailField": {
25+
"label": "E-mail",
26+
"placeholder": "seu@email.com"
27+
},
28+
"buttonText": "PRÓXIMO"
29+
},
30+
"product": {
31+
"title": "Produtos",
32+
"productField": {
33+
"label": "Produtos",
34+
"description": "Nós desenvolvemos o Derivative®, matéria-prima feita de redes de pesca que estariam à deriva no oceano. Imagine, se você pudesse ter um produto feito com esse material, algo bem feito, com design, com história e impacto de verdade, qual seria?",
35+
"placeholder": "Pode ser algo que você usa no dia a dia, algo para casa ou algo que você veria e pensaria 'incrível, isso tinha que existir'."
36+
},
37+
"buttonText": "PRÓXIMO"
38+
},
39+
"brand": {
40+
"title": "Marcas",
41+
"brandField": {
42+
"label": "Marcas",
43+
"description": "Quais marcas você acha que combinam com o Deriva? Marcas que você admira e acredita que fariam sentido desenvolver um projeto juntos aplicando o Derivative®.",
44+
"placeholder": "Pode mandar quantas vier na cabeça."
45+
},
46+
"submitText": "ENVIAR"
47+
},
48+
"thankYou": {
49+
"title": "Perfeito. Obrigado por chegar junto!",
50+
"paragraphs": [
51+
"Estamos aqui para regenerar o oceano e seu apoio irá nos ajudar nessa jornada.",
52+
"Em breve, contaremos mais sobre o que estamos construindo. Mas por enquanto, você já tá dentro. E isso já é mais do que a maioria."
53+
],
54+
"farewell": "Até logo 🌊"
55+
}
56+
}
57+
],
58+
"__resolveType": "website/pages/Page.tsx",
59+
"seo": {
60+
"__resolveType": "website/sections/Seo/SeoV2.tsx"
61+
}
62+
}

.deco/metadata/blocks.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"/.deco/blocks/Preview Sections MyHero.json":{"blockType":"sections","__resolveType":"site/sections/myHero.tsx"},"/.deco/blocks/pages-home-5afd25174424.json":{"name":"Home","path":"/","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/site.json":{"blockType":"apps","__resolveType":"site/apps/site.ts"},"/.deco/blocks/Header.json":{"blockType":"sections","__resolveType":"site/sections/Header.tsx"},"/.deco/blocks/app-site%252Fapps%252Fsite.ts.json":{"blockType":"apps","__resolveType":"site/apps/site.ts"},"/.deco/blocks/Serene%20Coastline.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Sunset%20Glow.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Footer.json":{"blockType":"sections","__resolveType":"site/sections/Footer.tsx"},"/.deco/blocks/pages-test-3c04f2690620.json":{"name":"Test","path":"/test","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FImageWithParagraph.tsx.json":{"blockType":"sections","__resolveType":"site/sections/ImageWithParagraph.tsx"},"/.deco/blocks/pages-mynewpage-a771a8f0fda6.json":{"name":"My New Page","path":"/example-path","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/Groovy%20Vibes.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Preview%20%2Fsections%2Fhero-2.tsx.json":{"blockType":"sections","__resolveType":"site/sections/hero-2.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FHero.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Hero.tsx"},"/.deco/blocks/Mobile.json":{"blockType":"matchers","__resolveType":"website/matchers/device.ts"},"/.deco/blocks/Preview%20Sections%20MyHero.json":{"blockType":"sections","__resolveType":"site/sections/myHero.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FPoweredByDeco.tsx.json":{"blockType":"sections","__resolveType":"site/sections/PoweredByDeco.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FFaq.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Faq.tsx"},"/.deco/blocks/Urban%20Chic.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Faq%20-%20default.json":{"blockType":"sections","__resolveType":"site/sections/Faq.tsx"},"/.deco/blocks/pages-Landing-945097.json":{"name":"Landing","path":"/landing","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/Neutral.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Preview%20site%2Fsections%2FImageWithParagraph.tsx.json":{"blockType":"sections","__resolveType":"site/sections/ImageWithParagraph.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FFooter.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Footer.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FHeader.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Header.tsx"},"/.deco/blocks/Vanilla.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/deco-blog.json":{"blockType":"apps","__resolveType":"site/apps/deco/blog.ts"},"/.deco/blocks/Preview%20%2Fsections%2Fhero-1.tsx.json":{"blockType":"sections","__resolveType":"site/sections/hero-1.tsx"},"/.deco/blocks/deco-htmx.json":{"blockType":"apps","__resolveType":"site/apps/deco/htmx.ts"},"/.deco/blocks/hero.json":{"blockType":"sections","__resolveType":"site/sections/Hero.tsx"},"/.deco/blocks/Desktop.json":{"blockType":"matchers","__resolveType":"website/matchers/device.ts"}}
1+
{"/.deco/blocks/Preview Sections MyHero.json":{"blockType":"sections","__resolveType":"site/sections/myHero.tsx"},"/.deco/blocks/pages-home-5afd25174424.json":{"name":"Home","path":"/","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/site.json":{"blockType":"apps","__resolveType":"site/apps/site.ts"},"/.deco/blocks/Header.json":{"blockType":"sections","__resolveType":"site/sections/Header.tsx"},"/.deco/blocks/app-site%252Fapps%252Fsite.ts.json":{"blockType":"apps","__resolveType":"site/apps/site.ts"},"/.deco/blocks/Serene%20Coastline.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/pages-ativacao.json":{"name":"Ativação","path":"/ativacao","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/Sunset%20Glow.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Footer.json":{"blockType":"sections","__resolveType":"site/sections/Footer.tsx"},"/.deco/blocks/pages-test-3c04f2690620.json":{"name":"Test","path":"/test","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FImageWithParagraph.tsx.json":{"blockType":"sections","__resolveType":"site/sections/ImageWithParagraph.tsx"},"/.deco/blocks/pages-mynewpage-a771a8f0fda6.json":{"name":"My New Page","path":"/example-path","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/Groovy%20Vibes.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Preview%20%2Fsections%2Fhero-2.tsx.json":{"blockType":"sections","__resolveType":"site/sections/hero-2.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FHero.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Hero.tsx"},"/.deco/blocks/Mobile.json":{"blockType":"matchers","__resolveType":"website/matchers/device.ts"},"/.deco/blocks/Preview%20Sections%20MyHero.json":{"blockType":"sections","__resolveType":"site/sections/myHero.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FPoweredByDeco.tsx.json":{"blockType":"sections","__resolveType":"site/sections/PoweredByDeco.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FFaq.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Faq.tsx"},"/.deco/blocks/Urban%20Chic.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Faq%20-%20default.json":{"blockType":"sections","__resolveType":"site/sections/Faq.tsx"},"/.deco/blocks/pages-Landing-945097.json":{"name":"Landing","path":"/landing","blockType":"pages","__resolveType":"website/pages/Page.tsx"},"/.deco/blocks/Neutral.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/Preview%20site%2Fsections%2FImageWithParagraph.tsx.json":{"blockType":"sections","__resolveType":"site/sections/ImageWithParagraph.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FFooter.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Footer.tsx"},"/.deco/blocks/Preview%20%2Fsections%2FHeader.tsx.json":{"blockType":"sections","__resolveType":"site/sections/Header.tsx"},"/.deco/blocks/Vanilla.json":{"blockType":"sections","__resolveType":"site/sections/Theme/Theme.tsx"},"/.deco/blocks/deco-blog.json":{"blockType":"apps","__resolveType":"site/apps/deco/blog.ts"},"/.deco/blocks/Preview%20%2Fsections%2Fhero-1.tsx.json":{"blockType":"sections","__resolveType":"site/sections/hero-1.tsx"},"/.deco/blocks/deco-htmx.json":{"blockType":"apps","__resolveType":"site/apps/deco/htmx.ts"},"/.deco/blocks/hero.json":{"blockType":"sections","__resolveType":"site/sections/Hero.tsx"},"/.deco/blocks/Desktop.json":{"blockType":"matchers","__resolveType":"website/matchers/device.ts"}}

actions/submitActivation.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { AppContext } from "../apps/site.ts";
2+
import { ConvexHttpClient } from "convex/browser";
3+
4+
export interface Props {
5+
nome: string;
6+
email: string;
7+
produtos: string;
8+
marcas: string;
9+
}
10+
11+
export default async function SubmitActivationAction(
12+
props: Props,
13+
req: Request,
14+
ctx: AppContext,
15+
) {
16+
try {
17+
if (props.email) {
18+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
19+
if (!emailRegex.test(props.email)) {
20+
return {
21+
success: false,
22+
message: "Por favor, insira um email válido.",
23+
};
24+
}
25+
}
26+
27+
const convexUrl = "https://watchful-capybara-907.convex.cloud";
28+
const client = new ConvexHttpClient(convexUrl);
29+
30+
const result = await client.mutation("activations:submitActivationForm", {
31+
nome: props.nome.trim(),
32+
email: props.email.trim().toLowerCase(),
33+
produtos: props.produtos.trim(),
34+
marcas: props.marcas.trim(),
35+
});
36+
37+
return {
38+
success: true,
39+
message: "Ativação registrada com sucesso!",
40+
id: result.id,
41+
};
42+
} catch (error) {
43+
console.error("Erro ao salvar ativação no Convex:", error);
44+
return {
45+
success: false,
46+
message: "Erro ao enviar. Tente novamente em alguns instantes.",
47+
};
48+
}
49+
}

convex/_generated/api.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import type {
1313
FilterApi,
1414
FunctionReference,
1515
} from "convex/server";
16+
import type * as activations from "../activations.js";
1617
import type * as contatos from "../contatos.js";
1718
import type * as emails from "../emails.js";
1819

@@ -25,6 +26,7 @@ import type * as emails from "../emails.js";
2526
* ```
2627
*/
2728
declare const fullApi: ApiFromModules<{
29+
activations: typeof activations;
2830
contatos: typeof contatos;
2931
emails: typeof emails;
3032
}>;

convex/activations.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { mutation, query } from "./_generated/server.js";
2+
import { v } from "convex/values";
3+
import { internal } from "./_generated/api.js";
4+
5+
export const submitActivationForm = mutation({
6+
args: {
7+
nome: v.optional(v.string()),
8+
email: v.optional(v.string()),
9+
produtos: v.optional(v.string()),
10+
marcas: v.optional(v.string()),
11+
},
12+
handler: async (ctx, args) => {
13+
const now = Date.now();
14+
const id = await ctx.db.insert("activation_forms", {
15+
nome: args.nome ?? "",
16+
email: args.email ?? "",
17+
produtos: args.produtos ?? "",
18+
marcas: args.marcas ?? "",
19+
created_at: now,
20+
});
21+
22+
// Notificar por email
23+
await ctx.scheduler.runAfter(0, internal.emails.sendContactNotification, {
24+
nome: args.nome ?? "",
25+
email: args.email ?? "",
26+
mensagem: `[ATIVAÇÃO]\n\nProdutos: ${args.produtos ?? ""}\n\nMarcas: ${args.marcas ?? ""}`,
27+
});
28+
29+
return { id };
30+
},
31+
});
32+
33+
export const listar = query({
34+
args: {},
35+
handler: async (ctx) => {
36+
return await ctx.db
37+
.query("activation_forms")
38+
.withIndex("by_created_at")
39+
.order("desc")
40+
.collect();
41+
},
42+
});

convex/schema.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,23 @@ export default defineSchema({
77
email: v.string(),
88
mensagem: v.string(),
99
created_at: v.number(),
10+
assunto: v.optional(v.string()),
11+
empresa: v.optional(v.string()),
12+
telefone: v.optional(v.string()),
13+
origem: v.optional(v.string()),
14+
prioridade: v.optional(v.string()),
15+
status: v.optional(v.string()),
16+
updated_at: v.optional(v.number()),
17+
})
18+
.index("by_created_at", ["created_at"])
19+
.index("by_email", ["email"]),
20+
21+
activation_forms: defineTable({
22+
nome: v.string(),
23+
email: v.string(),
24+
produtos: v.string(),
25+
marcas: v.string(),
26+
created_at: v.number(),
1027
})
1128
.index("by_created_at", ["created_at"])
1229
.index("by_email", ["email"]),

fresh.gen.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
// This file is automatically updated during development when running `dev.ts`.
44

55
import * as $_app from "./routes/_app.tsx";
6+
import * as $ativacao from "./routes/ativacao.tsx";
67

78
import type { Manifest } from "$fresh/server.ts";
89

910
const manifest = {
1011
routes: {
1112
"./routes/_app.tsx": $_app,
13+
"./routes/ativacao.tsx": $ativacao,
1214
},
1315
islands: {},
1416
baseUrl: import.meta.url,

manifest.gen.ts

Lines changed: 46 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,58 +4,62 @@
44

55
import * as $$$$$$$$$0 from "./actions/contactFormConvex.ts";
66
import * as $$$$$$$$$1 from "./actions/contactFormConvexFixed.ts";
7-
import * as $$$$$$$$$2 from "./actions/submitToConvex.ts";
7+
import * as $$$$$$$$$2 from "./actions/submitActivation.ts";
8+
import * as $$$$$$$$$3 from "./actions/submitToConvex.ts";
89
import * as $$$$$$$$$$$0 from "./apps/deco/blog.ts";
910
import * as $$$$$$$$$$$1 from "./apps/deco/htmx.ts";
1011
import * as $$$$$$$$$$$2 from "./apps/site.ts";
11-
import * as $$$$$$0 from "./sections/Benefits.tsx";
12-
import * as $$$$$$1 from "./sections/BlogPosts.tsx";
13-
import * as $$$$$$2 from "./sections/ContactFormHybrid.tsx";
14-
import * as $$$$$$3 from "./sections/Derivative.tsx";
15-
import * as $$$$$$4 from "./sections/Faq.tsx";
16-
import * as $$$$$$5 from "./sections/Footer.tsx";
17-
import * as $$$$$$7 from "./sections/Header_default.tsx";
18-
import * as $$$$$$6 from "./sections/Header.tsx";
19-
import * as $$$$$$17 from "./sections/hero-1.tsx";
20-
import * as $$$$$$18 from "./sections/hero-2.tsx";
21-
import * as $$$$$$8 from "./sections/Hero.tsx";
22-
import * as $$$$$$19 from "./sections/hero2.tsx";
23-
import * as $$$$$$9 from "./sections/ImageWithParagraph.tsx";
24-
import * as $$$$$$10 from "./sections/Logos.tsx";
25-
import * as $$$$$$11 from "./sections/Mission.tsx";
26-
import * as $$$$$$12 from "./sections/NetworkRecoverySteps.tsx";
27-
import * as $$$$$$13 from "./sections/Services.tsx";
28-
import * as $$$$$$14 from "./sections/Supporters.tsx";
29-
import * as $$$$$$15 from "./sections/Theme/Theme.tsx";
30-
import * as $$$$$$16 from "./sections/UnicornStudioEffect.tsx";
12+
import * as $$$$$$0 from "./sections/ActivationForm.tsx";
13+
import * as $$$$$$1 from "./sections/Benefits.tsx";
14+
import * as $$$$$$2 from "./sections/BlogPosts.tsx";
15+
import * as $$$$$$3 from "./sections/ContactFormHybrid.tsx";
16+
import * as $$$$$$4 from "./sections/Derivative.tsx";
17+
import * as $$$$$$5 from "./sections/Faq.tsx";
18+
import * as $$$$$$6 from "./sections/Footer.tsx";
19+
import * as $$$$$$8 from "./sections/Header_default.tsx";
20+
import * as $$$$$$7 from "./sections/Header.tsx";
21+
import * as $$$$$$18 from "./sections/hero-1.tsx";
22+
import * as $$$$$$19 from "./sections/hero-2.tsx";
23+
import * as $$$$$$9 from "./sections/Hero.tsx";
24+
import * as $$$$$$20 from "./sections/hero2.tsx";
25+
import * as $$$$$$10 from "./sections/ImageWithParagraph.tsx";
26+
import * as $$$$$$11 from "./sections/Logos.tsx";
27+
import * as $$$$$$12 from "./sections/Mission.tsx";
28+
import * as $$$$$$13 from "./sections/NetworkRecoverySteps.tsx";
29+
import * as $$$$$$14 from "./sections/Services.tsx";
30+
import * as $$$$$$15 from "./sections/Supporters.tsx";
31+
import * as $$$$$$16 from "./sections/Theme/Theme.tsx";
32+
import * as $$$$$$17 from "./sections/UnicornStudioEffect.tsx";
3133

3234
const manifest = {
3335
"sections": {
34-
"site/sections/Benefits.tsx": $$$$$$0,
35-
"site/sections/BlogPosts.tsx": $$$$$$1,
36-
"site/sections/ContactFormHybrid.tsx": $$$$$$2,
37-
"site/sections/Derivative.tsx": $$$$$$3,
38-
"site/sections/Faq.tsx": $$$$$$4,
39-
"site/sections/Footer.tsx": $$$$$$5,
40-
"site/sections/Header_default.tsx": $$$$$$7,
41-
"site/sections/Header.tsx": $$$$$$6,
42-
"site/sections/hero-1.tsx": $$$$$$17,
43-
"site/sections/hero-2.tsx": $$$$$$18,
44-
"site/sections/Hero.tsx": $$$$$$8,
45-
"site/sections/hero2.tsx": $$$$$$19,
46-
"site/sections/ImageWithParagraph.tsx": $$$$$$9,
47-
"site/sections/Logos.tsx": $$$$$$10,
48-
"site/sections/Mission.tsx": $$$$$$11,
49-
"site/sections/NetworkRecoverySteps.tsx": $$$$$$12,
50-
"site/sections/Services.tsx": $$$$$$13,
51-
"site/sections/Supporters.tsx": $$$$$$14,
52-
"site/sections/Theme/Theme.tsx": $$$$$$15,
53-
"site/sections/UnicornStudioEffect.tsx": $$$$$$16,
36+
"site/sections/ActivationForm.tsx": $$$$$$0,
37+
"site/sections/Benefits.tsx": $$$$$$1,
38+
"site/sections/BlogPosts.tsx": $$$$$$2,
39+
"site/sections/ContactFormHybrid.tsx": $$$$$$3,
40+
"site/sections/Derivative.tsx": $$$$$$4,
41+
"site/sections/Faq.tsx": $$$$$$5,
42+
"site/sections/Footer.tsx": $$$$$$6,
43+
"site/sections/Header_default.tsx": $$$$$$8,
44+
"site/sections/Header.tsx": $$$$$$7,
45+
"site/sections/hero-1.tsx": $$$$$$18,
46+
"site/sections/hero-2.tsx": $$$$$$19,
47+
"site/sections/Hero.tsx": $$$$$$9,
48+
"site/sections/hero2.tsx": $$$$$$20,
49+
"site/sections/ImageWithParagraph.tsx": $$$$$$10,
50+
"site/sections/Logos.tsx": $$$$$$11,
51+
"site/sections/Mission.tsx": $$$$$$12,
52+
"site/sections/NetworkRecoverySteps.tsx": $$$$$$13,
53+
"site/sections/Services.tsx": $$$$$$14,
54+
"site/sections/Supporters.tsx": $$$$$$15,
55+
"site/sections/Theme/Theme.tsx": $$$$$$16,
56+
"site/sections/UnicornStudioEffect.tsx": $$$$$$17,
5457
},
5558
"actions": {
5659
"site/actions/contactFormConvex.ts": $$$$$$$$$0,
5760
"site/actions/contactFormConvexFixed.ts": $$$$$$$$$1,
58-
"site/actions/submitToConvex.ts": $$$$$$$$$2,
61+
"site/actions/submitActivation.ts": $$$$$$$$$2,
62+
"site/actions/submitToConvex.ts": $$$$$$$$$3,
5963
},
6064
"apps": {
6165
"site/apps/deco/blog.ts": $$$$$$$$$$$0,

routes/ativacao.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { defineRoute } from "$fresh/server.ts";
2+
import ActivationForm from "../sections/ActivationForm.tsx";
3+
4+
export default defineRoute((_req, _ctx) => {
5+
return <ActivationForm />;
6+
});

0 commit comments

Comments
 (0)