Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
</td>
<td width="66%" valign="top">

### [`SENTRA / BOT`](https://sentrahai.com/)
### [`SENTRA / BOT`](https://bot.sentrahai.com/)

<a href="https://sentrahai.com/">
<a href="https://bot.sentrahai.com/">
<img src="https://readme-typing-svg.demolab.com?font=Caveat&weight=700&size=33&duration=3400&pause=1500&color=EB5939&vCenter=true&width=710&height=44&lines=Intelligence+for+Autonomy.;Persistent+AI+teammates+you+actually+own." alt="Sentra Bot — Intelligence for Autonomy." />
</a>

<b>Operational signal:</b> persistent agents · memory · routines · computers · human authority

<a href="https://sentrahai.com/"><b>Sentra Bot</b></a><br />
<a href="https://bot.sentrahai.com/"><b>Sentra Bot</b></a><br />
The autonomous intelligence layer of Sentra Artificial Intelligence.

<p>
Expand All @@ -38,7 +38,7 @@ The autonomous intelligence layer of Sentra Artificial Intelligence.

### `01 / ORIGIN SIGNAL`

**[Sentra Bot](https://sentrahai.com/)** is the operating layer for persistent, composable AI teammates you actually own — agents that can hold memory, execute routines, use computers, and work against your own models, your own data, and your own machines.
**[Sentra Bot](https://bot.sentrahai.com/)** is the operating layer for persistent, composable AI teammates you actually own — agents that can hold memory, execute routines, use computers, and work against your own models, your own data, and your own machines.

The repository is not a single chatbot and not a thin model wrapper. It contains the full runtime surface: API, web and desktop clients, background worker, job orchestration, memory, computer providers, connectors, artifacts, realtime infrastructure, and a deliberately read-only clinical reconnaissance bridge.

Expand Down
14 changes: 7 additions & 7 deletions apps/docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"logo": {
"light": "/logo/light.png",
"dark": "/logo/dark.png",
"href": "https://sentrahai.com"
"href": "https://bot.sentrahai.com"
},
"appearance": { "default": "dark" },
"fonts": { "family": "Geist" },
Expand All @@ -26,18 +26,18 @@
]
},
"navbar": {
"links": [{ "label": "Mengenai Sentra", "href": "https://sentrahai.com/tentang.html" }],
"primary": { "type": "button", "label": "Coba SentraBot", "href": "https://sentrahai.com" }
"links": [{ "label": "Mengenai Sentra", "href": "https://bot.sentrahai.com/tentang.html" }],
"primary": { "type": "button", "label": "Coba SentraBot", "href": "https://bot.sentrahai.com" }
},
"footer": {
"socials": { "website": "https://sentrahai.com" },
"socials": { "website": "https://bot.sentrahai.com" },
"links": [
{
"header": "Sentra",
"items": [
{ "label": "Mengenai Sentra", "href": "https://sentrahai.com/tentang.html" },
{ "label": "Privasi", "href": "https://sentrahai.com/privasi.html" },
{ "label": "Ketentuan", "href": "https://sentrahai.com/ketentuan.html" }
{ "label": "Mengenai Sentra", "href": "https://bot.sentrahai.com/tentang.html" },
{ "label": "Privasi", "href": "https://bot.sentrahai.com/privasi.html" },
{ "label": "Ketentuan", "href": "https://bot.sentrahai.com/ketentuan.html" }
]
}
]
Expand Down
36 changes: 36 additions & 0 deletions apps/site/DOMAIN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Domain map — Sentra Bot marketing site

Canonical production host for this package (`apps/site`):

**`https://bot.sentrahai.com`**

| Host | Role |
|------|------|
| `sentrahai.com` / `www` | Brand hub perusahaan (bukan landing Bot) |
| `bot.sentrahai.com` | Landing + halaman publik Sentra Bot (`apps/site`) |
| `*.vercel.app` (`sentrabot-site`) | Preview / fallback deploy Vercel |

DNS untuk `sentrahai.com` sudah di Vercel (`ns1`/`ns2.vercel-dns.com`). Subdomain `bot` harus di-assign ke project **`sentrabot-site`** (team yang deploy site ini). Apex **jangan** dipindah ke project ini — apex masih dipakai produk lain.

Share preview (WhatsApp / X / LinkedIn) and search tags (`canonical`, `og:*`, `twitter:*`, `sitemap.xml`, `robots.txt`) must use **`https://bot.sentrahai.com`**, not the apex. HTTPS is terminated by Vercel; `vercel.json` adds HSTS.

## Assign domain (Vercel Dashboard)

1. Buka project **`sentrabot-site`** → **Settings** → **Domains**.
2. Add **`bot.sentrahai.com`**.
3. Karena NS sudah Vercel DNS, record biasanya dibuat otomatis.
4. Tunggu status **Valid**. Verifikasi:

```bash
curl -sI https://bot.sentrahai.com/
# expect: HTTP/2 200 dan HTML Sentra Bot (bukan x-vercel-error: DEPLOYMENT_NOT_FOUND)
```

## Assign via CLI (butuh token)

```bash
vercel link --project sentrabot-site --yes
vercel domains add bot.sentrahai.com
```

Env: `VERCEL_TOKEN` dengan akses team pemilik project.
30 changes: 30 additions & 0 deletions apps/site/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,40 @@ Project Root Directory must be `apps/site`. `vercel.json` forces `npm ci` +
pulls Electron/Playwright and can fail with `ERR_INVALID_THIS` /
`ERR_PNPM_META_FETCH_FAIL` on Vercel).

Production domain: **`https://bot.sentrahai.com`** (see `DOMAIN.md`). Do not
point apex `sentrahai.com` at this project.

Deploy-critical images under `public/` and `src/` are stored as normal git
blobs (not Git LFS). Vercel otherwise ships LFS pointer text (~130 bytes) as
broken PNGs unless Project Settings → Git → Git LFS is enabled.

HTTPS is provided by Vercel. `vercel.json` adds HSTS and does **not** use the
Vite SPA fallback, so unknown paths serve `public/404.html` instead of the
homepage.

## Favicon, share preview, SEO, analytics

Browser tabs use `public/favicon.ico` plus `favicon.svg` and
`apple-touch-icon.png`. WhatsApp, X/Twitter, and LinkedIn read Open Graph and
Twitter Card tags (`og:image` is `public/og-image.png`, 1200×630). Indexed
pages also have `title`, `description`, and a canonical URL on
`https://bot.sentrahai.com`. Apex `sentrahai.com` remains the company hub, not this landing.

`public/sitemap.xml` lists only indexable URLs (home, Tentang, Daftar).
Privacy and terms stay `noindex` because those drafts are not ready for search
results. `public/robots.txt` points crawlers at the sitemap.

Analytics is optional and off by default. `public/js/site-analytics.js` loads
`/analytics.json` and enables **one** vendor if a key is present, in this
order: PostHog, Plausible, Google Analytics 4. Empty strings mean no third-party
script. Do not commit real keys. On Vercel, set any of
`SITE_POSTHOG_KEY` / `SITE_POSTHOG_HOST`, `SITE_PLAUSIBLE_DOMAIN`, or
`SITE_GA4_MEASUREMENT_ID`; `npm run build` writes them into `analytics.json`.

```bash
pnpm --filter cora check:seo
```

## Layout

- `original/` — untouched HTML capture (pre-rebrand archive)
Expand Down
30 changes: 27 additions & 3 deletions apps/site/index.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<html lang="id">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/sentrabot.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sentra Bot</title>
<meta name="description" content="Agen yang bekerja, bukan sekadar chat. AI yang memahami cara orang Indonesia belajar, berkarier, dan mengatur keuangan." />
<meta name="theme-color" content="#0D1117" />
<link rel="canonical" href="https://bot.sentrahai.com/" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Sentra Bot" />
<meta property="og:locale" content="id_ID" />
<meta property="og:url" content="https://bot.sentrahai.com/" />
<meta property="og:title" content="Sentra Bot" />
<meta property="og:description" content="Agen yang bekerja, bukan sekadar chat. AI yang memahami cara orang Indonesia belajar, berkarier, dan mengatur keuangan." />
<meta property="og:image" content="https://bot.sentrahai.com/og-image.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Sentra Bot — Agen yang bekerja, bukan sekadar chat." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Sentra Bot" />
<meta name="twitter:description" content="Agen yang bekerja, bukan sekadar chat. AI yang memahami cara orang Indonesia belajar, berkarier, dan mengatur keuangan." />
<meta name="twitter:image" content="https://bot.sentrahai.com/og-image.png" />
<meta name="twitter:image:alt" content="Sentra Bot — Agen yang bekerja, bukan sekadar chat." />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="preload" href="/assets/fonts/ibm-plex-sans-latin-400-normal.woff2" as="font" type="font/woff2" crossorigin />
Expand All @@ -13,7 +37,7 @@
<link rel="stylesheet" href="/assets/f1e5e0180c0d.css" />
<link rel="stylesheet" href="/assets/fonts.css" />
<link rel="stylesheet" href="/assets/polish.css" />
<title>Sentra Bot</title>
<script src="/js/site-analytics.js" defer></script>
</head>
<body>
<div id="root"></div>
Expand Down
5 changes: 3 additions & 2 deletions apps/site/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
},
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
"build": "node scripts/write-analytics-config.mjs && node scripts/check-seo.mjs && vite build",
"preview": "vite preview",
"check:seo": "node scripts/check-seo.mjs"
},
"dependencies": {
"react": "^19.1.0",
Expand Down
69 changes: 69 additions & 0 deletions apps/site/public/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<!doctype html>
<html lang="id" dir="ltr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="robots" content="noindex, nofollow" />
<title>Halaman tidak ditemukan | Sentra Bot</title>
<meta name="description" content="Halaman yang Anda cari tidak ada di bot.sentrahai.com." />
<meta name="theme-color" content="#0D1117" />
<link rel="canonical" href="https://bot.sentrahai.com/404.html" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Sentra Bot" />
<meta property="og:locale" content="id_ID" />
<meta property="og:url" content="https://bot.sentrahai.com/404.html" />
<meta property="og:title" content="Halaman tidak ditemukan | Sentra Bot" />
<meta property="og:description" content="Halaman yang Anda cari tidak ada di bot.sentrahai.com." />
<meta property="og:image" content="https://bot.sentrahai.com/og-image.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Sentra Bot — Agen yang bekerja, bukan sekadar chat." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Halaman tidak ditemukan | Sentra Bot" />
<meta name="twitter:description" content="Halaman yang Anda cari tidak ada di bot.sentrahai.com." />
<meta name="twitter:image" content="https://bot.sentrahai.com/og-image.png" />
<meta name="twitter:image:alt" content="Sentra Bot — Agen yang bekerja, bukan sekadar chat." />
<link rel="stylesheet" href="/assets/fonts.css" />
<link rel="stylesheet" href="/assets/polish.css" />
<script src="/js/site-analytics.js" defer></script>
<style>
body { background:#0D1117; color:#E6ECF4; font-family:"IBM Plex Sans",Arial,sans-serif;
margin:0; -webkit-font-smoothing:antialiased; }
.wrap { max-width:640px; margin:0 auto; padding:48px 24px 96px; }
h1 { font-size:38px; line-height:1.15; letter-spacing:-.03em; color:#F5F7FA; margin:48px 0 12px; font-weight:600; }
p { font-size:17px; line-height:1.65; color:#C8D3E0; margin:0 0 28px; }
.code { color:#8B96A5; font-size:13px; letter-spacing:.08em; text-transform:uppercase; }
.actions { display:flex; gap:12px; flex-wrap:wrap; }
.actions a {
display:inline-flex; align-items:center; text-decoration:none; font-weight:600; font-size:15px;
border-radius:999px; padding:10px 18px;
}
.actions a.primary { background:#F5F7FA; color:#0D1117; }
.actions a.secondary { color:#F5F7FA; border:1px solid #263241; }
.actions a.secondary:hover { border-color:#5B8CFF; }
</style>
</head>
<body class="legal-page">
<header class="sb-page-header">
<a href="/" class="sb-brand" aria-label="Sentra Bot, kembali ke beranda"><img class="sb-brand__mark" src="/assets/sentra-logomark-white.png" alt="" width="256" height="256"><span class="sb-brand__name">Sentra Bot</span></a>
<nav class="sb-site-nav sb-nav" aria-label="Navigasi utama"><a href="/" class="sb-site-nav__link">Beranda</a><a href="/tentang.html" class="sb-site-nav__link">Tentang</a><a href="/daftar.html" class="sb-site-nav__link">Daftar</a><a href="/privasi.html" class="sb-site-nav__link">Privasi</a><a href="/ketentuan.html" class="sb-site-nav__link">Ketentuan</a><a href="/workspace" class="sb-site-nav__link sb-site-nav__link--primary">Masuk</a></nav>
<details class="sb-nav-mobile"><summary aria-label="Buka navigasi">Menu</summary><nav aria-label="Navigasi utama"><a href="/">Beranda</a><a href="/tentang.html">Tentang</a><a href="/daftar.html">Daftar</a><a href="/privasi.html">Privasi</a><a href="/ketentuan.html">Ketentuan</a><a href="/workspace">Masuk</a></nav></details>
</header>
<main class="wrap">
<p class="code">404</p>
<h1>Halaman tidak ditemukan.</h1>
<p>Tautan ini tidak mengarah ke halaman yang ada. Kembali ke beranda, atau buka halaman Tentang bila Anda mencari Sentra Artificial Intelligence.</p>
<p class="actions">
<a class="primary" href="/">Beranda</a>
<a class="secondary" href="/tentang.html">Tentang</a>
<a class="secondary" href="/daftar.html">Daftar</a>
</p>
</main>
</body>
</html>
6 changes: 6 additions & 0 deletions apps/site/public/analytics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"posthogKey": "",
"posthogHost": "",
"plausibleDomain": "",
"ga4MeasurementId": ""
}
Binary file added apps/site/public/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 23 additions & 1 deletion apps/site/public/daftar.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,36 @@
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cara memulai | Sentra Bot</title>
<meta name="description" content="Tiga langkah memulai Sentra Bot: daftar lewat akses beta, pilih paket Free atau berlangganan, lalu pasang di komputer atau server Anda sendiri." />
<meta name="theme-color" content="#0D1117" />
<link rel="canonical" href="https://bot.sentrahai.com/daftar.html" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon-180.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Sentra Bot" />
<meta property="og:locale" content="id_ID" />
<meta property="og:url" content="https://bot.sentrahai.com/daftar.html" />
<meta property="og:title" content="Cara memulai | Sentra Bot" />
<meta property="og:description" content="Tiga langkah memulai Sentra Bot: daftar lewat akses beta, pilih paket Free atau berlangganan, lalu pasang di komputer atau server Anda sendiri." />
<meta property="og:image" content="https://bot.sentrahai.com/og-image.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Sentra Bot — Agen yang bekerja, bukan sekadar chat." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Cara memulai | Sentra Bot" />
<meta name="twitter:description" content="Tiga langkah memulai Sentra Bot: daftar lewat akses beta, pilih paket Free atau berlangganan, lalu pasang di komputer atau server Anda sendiri." />
<meta name="twitter:image" content="https://bot.sentrahai.com/og-image.png" />
<meta name="twitter:image:alt" content="Sentra Bot — Agen yang bekerja, bukan sekadar chat." />
<link rel="stylesheet" href="/assets/62d1d5e45a60.css" />
<link rel="stylesheet" href="/assets/0bb0abe83b56.css" />
<link rel="stylesheet" href="/assets/f1e5e0180c0d.css" />
<link rel="stylesheet" href="/assets/fonts.css" />
<link rel="stylesheet" href="/assets/polish.css" />
<script src="/assets/mascot.js" defer></script>
<script src="/js/site-analytics.js" defer></script>
<style>body { margin:0; }</style>
</head>
<body>
Expand Down
Binary file added apps/site/public/favicon.ico
Binary file not shown.
Loading
Loading