Skip to content

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

76 linesCodeBlameRaw
1/**
2 * Schema.org JSON-LD for the pages that say what g1t is and what it costs,
3 * so search engines and AI assistants read it without parsing the prose.
4 * Each is a `script:ld+json` meta descriptor, added after `page(…)`.
5 */
6import type { MetaDescriptor } from "react-router";
7
8import { COMPANY, SOCIAL } from "./legal.ts";
9import { DESCRIPTION, SITE } from "./meta.ts";
10
11export function organization(): MetaDescriptor {
12 return {
13 "script:ld+json": {
14 "@context": "https://schema.org",
15 "@type": "Organization",
16 name: COMPANY.name,
17 url: COMPANY.url,
18 contactPoint: { "@type": "ContactPoint", email: COMPANY.email, contactType: "customer support" },
19 founder: { "@type": "Person", name: COMPANY.founder },
20 brand: { "@type": "Brand", name: "g1t", url: SITE, sameAs: SOCIAL.map((account) => account.url) },
21 },
22 };
23}
24
25/** g1t as an application, with the plan's monthly price per workspace. */
26export function application(monthlyDollars: number): MetaDescriptor {
27 return {
28 "script:ld+json": {
29 "@context": "https://schema.org",
30 "@type": "SoftwareApplication",
31 name: "g1t",
32 url: SITE,
33 applicationCategory: "DeveloperApplication",
34 operatingSystem: "Web",
35 description: DESCRIPTION,
36 publisher: { "@type": "Organization", name: COMPANY.name, url: COMPANY.url },
37 license: "https://opensource.org/licenses/MIT",
38 offers: [
39 {
40 "@type": "Offer",
41 name: "Free",
42 price: "0",
43 priceCurrency: "USD",
44 description: "Chat and the forge, with no card.",
45 },
46 {
47 "@type": "Offer",
48 name: "The g1t plan",
49 price: String(monthlyDollars),
50 priceCurrency: "USD",
51 description: "A month per workspace, never per seat, with $10 of usage included.",
52 priceSpecification: {
53 "@type": "UnitPriceSpecification",
54 price: String(monthlyDollars),
55 priceCurrency: "USD",
56 unitText: "month per workspace",
57 },
58 },
59 ],
60 },
61 };
62}
63
64export function faqPage(questions: { q: string; a: string }[]): MetaDescriptor {
65 return {
66 "script:ld+json": {
67 "@context": "https://schema.org",
68 "@type": "FAQPage",
69 mainEntity: questions.map((item) => ({
70 "@type": "Question",
71 name: item.q,
72 acceptedAnswer: { "@type": "Answer", text: item.a },
73 })),
74 },
75 };
76}