Build EDUT web repo with localized landing, legal pages, and deployment docs
This commit is contained in:
commit
2fa83e1ed8
66
README.md
Normal file
66
README.md
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# EDUT Web
|
||||||
|
|
||||||
|
Public-facing EDUT web surfaces and deployment specs.
|
||||||
|
|
||||||
|
## Repository Layout
|
||||||
|
|
||||||
|
```text
|
||||||
|
public/
|
||||||
|
index.html
|
||||||
|
privacy/index.html
|
||||||
|
terms/index.html
|
||||||
|
translations/
|
||||||
|
en.json
|
||||||
|
zh.json
|
||||||
|
es.json
|
||||||
|
ar.json
|
||||||
|
fr.json
|
||||||
|
pt.json
|
||||||
|
de.json
|
||||||
|
ja.json
|
||||||
|
ru.json
|
||||||
|
ko.json
|
||||||
|
hi.json
|
||||||
|
he.json
|
||||||
|
docs/
|
||||||
|
secret-system-spec.md
|
||||||
|
vision.md
|
||||||
|
review-notes.md
|
||||||
|
platform-spec-alignment-review.md
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Internationalization
|
||||||
|
|
||||||
|
Landing-page i18n rules:
|
||||||
|
|
||||||
|
- Never translated: `edut · עֵדוּת`
|
||||||
|
- Localized: meaning line, descriptor, `acknowledged` label, footer labels, accessibility/AI context abstract
|
||||||
|
- English authoritative at launch: privacy and terms pages
|
||||||
|
|
||||||
|
Runtime behavior in `/public/index.html`:
|
||||||
|
|
||||||
|
1. Resolve language from `localStorage` or `navigator.language`
|
||||||
|
2. Match to supported locale set
|
||||||
|
3. Load `translations/<lang>.json`
|
||||||
|
4. Fallback to English
|
||||||
|
5. Persist chosen language to `localStorage`
|
||||||
|
|
||||||
|
RTL handling:
|
||||||
|
|
||||||
|
- Locale bundles set `dir` to `rtl` for Arabic/Hebrew.
|
||||||
|
- Page layout remains LTR.
|
||||||
|
- Localized nodes receive per-node direction.
|
||||||
|
|
||||||
|
## Deployment Notes
|
||||||
|
|
||||||
|
If web root is `public/`, ensure `translations/` is also served at `/translations`.
|
||||||
|
|
||||||
|
Example options:
|
||||||
|
|
||||||
|
- copy `translations/` to web root as sibling static directory
|
||||||
|
- configure server alias `/translations -> <repo>/translations`
|
||||||
|
|
||||||
|
## Legal Note
|
||||||
|
|
||||||
|
`/public/privacy/index.html` and `/public/terms/index.html` are English-governing versions.
|
||||||
42
docs/platform-spec-alignment-review.md
Normal file
42
docs/platform-spec-alignment-review.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Platform Spec Alignment Review
|
||||||
|
|
||||||
|
## Sources Referenced
|
||||||
|
|
||||||
|
- `/Users/vsg/Documents/VSG Codex/kernel/docs/architecture/PRODUCT_ARCHITECTURE.md`
|
||||||
|
- `/Users/vsg/Documents/VSG Codex/kernel/docs/architecture/REPO_TOPOLOGY_25Y.md`
|
||||||
|
- `/Users/vsg/Documents/VSG Codex/platform-docs/business/38_license_model.md` (noted as potentially legacy relative to latest direction)
|
||||||
|
|
||||||
|
## Alignment Summary
|
||||||
|
|
||||||
|
The revised web copy is aligned with core platform direction on:
|
||||||
|
|
||||||
|
1. Deterministic governance as primary execution/control model.
|
||||||
|
2. Layered architecture where intelligence is optional augmentation.
|
||||||
|
3. Local-first durability and operational resilience framing.
|
||||||
|
4. Open/closed boundary discipline (no disclosure of private kernel internals).
|
||||||
|
|
||||||
|
## Resolved Conflicts from Initial Web Draft
|
||||||
|
|
||||||
|
1. Ownership/IP overstatement removed.
|
||||||
|
- Previous copy implied full source-code transfer in all cases.
|
||||||
|
- Revised copy now uses contractual-boundary language.
|
||||||
|
|
||||||
|
2. Crypto exclusion statement removed.
|
||||||
|
- Previous copy categorically denied crypto association.
|
||||||
|
- Revised copy avoids hard claims that can conflict with evolving licensing rails.
|
||||||
|
|
||||||
|
3. Secret system spec correctness fixed.
|
||||||
|
- Mailgun signing verification now references signing key.
|
||||||
|
- Failure handling now avoids silent acceptance on processing failure.
|
||||||
|
|
||||||
|
## Deliberate Neutrality Choices
|
||||||
|
|
||||||
|
To avoid drift between evolving licensing specs and public marketing:
|
||||||
|
|
||||||
|
- No fixed pricing is stated.
|
||||||
|
- No hard commitment to one entitlement unit (per-human vs per-device) is stated on landing page.
|
||||||
|
- No claim is made that requires publishing proprietary module/kernel implementation details.
|
||||||
|
|
||||||
|
## Recommendation
|
||||||
|
|
||||||
|
Treat this web repo as the public narrative layer, and keep constitutional licensing/mechanics claims anchored in dedicated legal and contract documents as those finalize.
|
||||||
46
docs/review-notes.md
Normal file
46
docs/review-notes.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# Web Review Notes and Applied Fixes
|
||||||
|
|
||||||
|
## Scope Reviewed
|
||||||
|
|
||||||
|
- `/public/index.html`
|
||||||
|
- `/public/privacy/index.html`
|
||||||
|
- `/public/terms/index.html`
|
||||||
|
- `/docs/secret-system-spec.md`
|
||||||
|
|
||||||
|
## Fixes Applied
|
||||||
|
|
||||||
|
1. Repaired legal-page integrity.
|
||||||
|
- Rebuilt terms page because source file was truncated and invalid HTML.
|
||||||
|
- Added complete legal sections, contact address, and governing-language clause.
|
||||||
|
|
||||||
|
2. Corrected public copy conflicts.
|
||||||
|
- Removed claims that conflict with private-IP posture.
|
||||||
|
- Removed categorical anti-crypto statement that conflicted with roadmap flexibility.
|
||||||
|
- Kept language high-level and architecture-accurate.
|
||||||
|
|
||||||
|
3. Implemented multilingual landing behavior.
|
||||||
|
- Added language detection from `navigator.language`.
|
||||||
|
- Added locale persistence in `localStorage`.
|
||||||
|
- Added fallback chain to English.
|
||||||
|
- Added 12 locale bundles and full localized context abstracts.
|
||||||
|
- Preserved immutable identity string: `edut · עֵדוּת`.
|
||||||
|
|
||||||
|
4. Improved accessibility behavior.
|
||||||
|
- Added translatable skip-link and interaction hint.
|
||||||
|
- Kept hidden context layer readable for assistive technology.
|
||||||
|
- Added per-node RTL direction handling for Arabic and Hebrew text.
|
||||||
|
|
||||||
|
5. Corrected secret webhook spec risks.
|
||||||
|
- Mailgun verification now references signing key (not sending API key).
|
||||||
|
- Inbound code extraction anchored to recipient local-part first.
|
||||||
|
- Error-handling guidance updated to avoid silent data loss.
|
||||||
|
|
||||||
|
6. Privacy policy hardening.
|
||||||
|
- Removed over-broad ad-tech assumptions.
|
||||||
|
- Tightened wording to match likely current data handling.
|
||||||
|
- Added English-authoritative language clause.
|
||||||
|
|
||||||
|
## Remaining Advisory Notes
|
||||||
|
|
||||||
|
- If legal counsel requires jurisdiction-specific disclosures, privacy/terms should receive formal legal review.
|
||||||
|
- If deployment serves `/public` as docroot, configure static routing for `/translations` or mirror translation assets accordingly.
|
||||||
364
docs/secret-system-spec.md
Normal file
364
docs/secret-system-spec.md
Normal file
@ -0,0 +1,364 @@
|
|||||||
|
# Edut Secret System — Deployment Spec
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The Edut secret system is an organic waitlist that runs on `edut.ai`. Visitors click the landing page, their email client opens with a pre-filled classified-looking message, they send it, and an auto-reply confirms their designation. No forms, no signups — they email you, you reply.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
Visitor clicks orb on edut.ai
|
||||||
|
↓
|
||||||
|
Email client opens: mailto:0217073045482@secret.edut.ai
|
||||||
|
↓
|
||||||
|
Person sends email
|
||||||
|
↓
|
||||||
|
Mailgun receives on catch-all (*@secret.edut.ai)
|
||||||
|
↓
|
||||||
|
Mailgun POSTs to https://api.edut.ai/mailgun/inbound
|
||||||
|
↓
|
||||||
|
Webhook parses email, stores in SQLite, sends classified reply
|
||||||
|
↓
|
||||||
|
Reply threads under original email in sender's inbox
|
||||||
|
↓
|
||||||
|
Copy of inbound + reply also forwarded to j@edut.ai (Gmail archive)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Infrastructure (Already Configured)
|
||||||
|
|
||||||
|
| Service | Domain | Purpose |
|
||||||
|
|---------|--------|---------|
|
||||||
|
| Google Workspace | edut.ai | Business email (j@edut.ai), OAuth |
|
||||||
|
| Mailgun (Edut account) | secret.edut.ai | Catch-all inbound, API sending |
|
||||||
|
| Cloudflare | api.edut.ai → 89.167.8.148 | Webhook endpoint |
|
||||||
|
| Hetzner | 89.167.8.148 | Server running webhook + nginx |
|
||||||
|
|
||||||
|
### Mailgun Configuration
|
||||||
|
- Domain: `secret.edut.ai` (verified, green)
|
||||||
|
- Wildcard: **On**
|
||||||
|
- Tracking (click/open/unsubscribe): **All off**
|
||||||
|
- Sending API key: stored securely (ask Joshua)
|
||||||
|
- Inbound route: `match_recipient(".*@secret.edut.ai")` → `https://api.edut.ai/mailgun/inbound` (Forward + Stop, priority 0)
|
||||||
|
- Route also forwards to `j@edut.ai` for Gmail archive
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Component 1: Nginx Configuration
|
||||||
|
|
||||||
|
### File: `/etc/nginx/sites-available/api.edut.ai`
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name api.edut.ai;
|
||||||
|
|
||||||
|
location /mailgun/inbound {
|
||||||
|
proxy_pass http://127.0.0.1:3847;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
SSL is handled by Cloudflare (proxied). Nginx listens on 80, Cloudflare terminates TLS.
|
||||||
|
|
||||||
|
Port `3847` is arbitrary — the webhook service listens here.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Component 2: Webhook Service
|
||||||
|
|
||||||
|
### Language
|
||||||
|
Go or Python. Single file, minimal dependencies. Must be production-ready from first deploy.
|
||||||
|
|
||||||
|
### Endpoint: `POST /mailgun/inbound`
|
||||||
|
|
||||||
|
Mailgun sends a multipart form POST with these fields (among others):
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| `sender` | Email address of the person who sent the email |
|
||||||
|
| `recipient` | The timestamp address (e.g., `0217073045482@secret.edut.ai`) |
|
||||||
|
| `subject` | `EDUT-0217073045482` |
|
||||||
|
| `body-plain` | Plain text body (the classified access request) |
|
||||||
|
| `Message-Id` | Original message ID (needed for threading reply) |
|
||||||
|
| `Date` | Email date header |
|
||||||
|
|
||||||
|
### Processing Logic
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Parse the recipient local-part to extract the code
|
||||||
|
- Recipient format: "{code}@secret.edut.ai" where code is MMDDHHmmssmmm (13 digits)
|
||||||
|
- Extract code from `recipient` first; use subject parsing only as fallback validation
|
||||||
|
|
||||||
|
2. Parse sender email address
|
||||||
|
|
||||||
|
3. Store in SQLite:
|
||||||
|
- id (auto-increment — this is their sequential designation number)
|
||||||
|
- code (the timestamp code from subject)
|
||||||
|
- email (sender address)
|
||||||
|
- recipient (the full recipient address)
|
||||||
|
- message_id (Message-Id header for threading)
|
||||||
|
- created_at (server timestamp)
|
||||||
|
|
||||||
|
4. Format the token for display:
|
||||||
|
- code "0217073045482" → token "0217-0730-4548-2"
|
||||||
|
- Slice: [0:4]-[4:8]-[8:12]-[12:]
|
||||||
|
|
||||||
|
5. Generate auth token:
|
||||||
|
- Hash the code with a secret salt → first 16 chars of hex digest
|
||||||
|
- Format as: xxxx-xxxx-xxxx-xxxx
|
||||||
|
|
||||||
|
6. Get the sequential designation number (the SQLite auto-increment id)
|
||||||
|
- Pad to 4 digits: id 47 → "0047"
|
||||||
|
|
||||||
|
7. Build the classified reply (see template below)
|
||||||
|
|
||||||
|
8. Send reply via Mailgun API:
|
||||||
|
- From: "EDUT <protocol@secret.edut.ai>"
|
||||||
|
- To: sender's email
|
||||||
|
- Subject: "Re: EDUT-{code}"
|
||||||
|
- In-Reply-To: original Message-Id header
|
||||||
|
- References: original Message-Id header
|
||||||
|
- Body: plain text classified reply
|
||||||
|
- Use the sending API key for secret.edut.ai domain
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mailgun Signature Verification
|
||||||
|
|
||||||
|
Every inbound POST from Mailgun includes a signature. **Verify it** to prevent spoofing:
|
||||||
|
|
||||||
|
- `timestamp` — Unix timestamp
|
||||||
|
- `token` — Random string
|
||||||
|
- `signature` — HMAC-SHA256 of `timestamp + token` using your Mailgun webhook signing key
|
||||||
|
|
||||||
|
Reject any request that fails verification.
|
||||||
|
|
||||||
|
### Error Handling
|
||||||
|
|
||||||
|
- If recipient/subject does not match expected format, return `200` and drop as noise.
|
||||||
|
- Use `Message-Id` (or Mailgun event id) as idempotency key for inbound processing.
|
||||||
|
- If SQLite write fails due to transient failure, return `5xx` so Mailgun retries.
|
||||||
|
- If Mailgun send fails, retry with bounded backoff; if still failing, return `5xx`.
|
||||||
|
- Return `2xx` only after persistence succeeds and outbound reply is accepted or deterministically deduped.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Component 3: Auto-Reply Email Template
|
||||||
|
|
||||||
|
### Plain text body:
|
||||||
|
|
||||||
|
```
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
EDUT GOVERNANCE PROTOCOL
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
ACCESS REGISTRATION CONFIRMED
|
||||||
|
|
||||||
|
Designation: #{designation_number}
|
||||||
|
Auth Token: {auth_token}
|
||||||
|
Classification: OBSERVER
|
||||||
|
Status: ACKNOWLEDGED
|
||||||
|
|
||||||
|
Timestamp: {iso_timestamp}
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
This designation is permanent and
|
||||||
|
non-transferable. You will be notified
|
||||||
|
when your access level changes.
|
||||||
|
|
||||||
|
Do not reply to this message.
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
Edut LLC. All rights reserved.
|
||||||
|
Development and licensing of
|
||||||
|
deterministic governance systems.
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
```
|
||||||
|
|
||||||
|
### Variable Substitutions
|
||||||
|
|
||||||
|
| Variable | Source | Example |
|
||||||
|
|----------|--------|---------|
|
||||||
|
| `{designation_number}` | SQLite auto-increment id, zero-padded to 4 | `0047` |
|
||||||
|
| `{auth_token}` | HMAC-SHA256 hash of code, formatted xxxx-xxxx-xxxx-xxxx | `e7d2-4f1a-9bc3-a210` |
|
||||||
|
| `{iso_timestamp}` | Server UTC time in ISO 8601 | `2026-02-17T07:30:45Z` |
|
||||||
|
|
||||||
|
### Email Headers
|
||||||
|
|
||||||
|
```
|
||||||
|
From: EDUT <protocol@secret.edut.ai>
|
||||||
|
To: {sender_email}
|
||||||
|
Subject: Re: EDUT-{code}
|
||||||
|
In-Reply-To: {original_message_id}
|
||||||
|
References: {original_message_id}
|
||||||
|
Content-Type: text/plain; charset=utf-8
|
||||||
|
```
|
||||||
|
|
||||||
|
The `In-Reply-To` and `References` headers ensure the reply threads under the original email in Gmail/Outlook/Apple Mail.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Component 4: Landing Page Deployment
|
||||||
|
|
||||||
|
### Files
|
||||||
|
- `public/index.html` — the Three.js globe landing page
|
||||||
|
- `public/privacy/index.html` — privacy policy
|
||||||
|
- `public/terms/index.html` — terms of use
|
||||||
|
- `translations/*.json` — locale bundles for localized landing content
|
||||||
|
|
||||||
|
### Deploy to both domains:
|
||||||
|
- `edut.ai` — primary landing page
|
||||||
|
- `edut.dev` — same page for now
|
||||||
|
|
||||||
|
### Nginx for landing pages:
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name edut.ai www.edut.ai;
|
||||||
|
root /var/www/edut.ai;
|
||||||
|
index index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name edut.dev www.edut.dev;
|
||||||
|
root /var/www/edut.dev;
|
||||||
|
index index.html;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Copy `public/index.html` to `/var/www/edut.ai/index.html` and `/var/www/edut.dev/index.html`.
|
||||||
|
Serve `translations/` at `/translations` so locale files can be loaded by the landing page.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Component 5: SQLite Database
|
||||||
|
|
||||||
|
### File: `/var/lib/edut/secrets.db`
|
||||||
|
|
||||||
|
### Schema:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE IF NOT EXISTS designations (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
code TEXT NOT NULL UNIQUE,
|
||||||
|
email TEXT NOT NULL,
|
||||||
|
recipient TEXT NOT NULL,
|
||||||
|
message_id TEXT,
|
||||||
|
auth_token TEXT NOT NULL,
|
||||||
|
created_at DATETIME DEFAULT (datetime('now')),
|
||||||
|
replied_at DATETIME,
|
||||||
|
reply_status TEXT DEFAULT 'pending'
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_designations_email ON designations(email);
|
||||||
|
CREATE INDEX idx_designations_code ON designations(code);
|
||||||
|
CREATE INDEX idx_designations_created ON designations(created_at);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Component 6: Launch Day Email
|
||||||
|
|
||||||
|
When the platform launches, query all designations and send the access level change email through Mailgun:
|
||||||
|
|
||||||
|
```
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
EDUT GOVERNANCE PROTOCOL
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
ACCESS LEVEL CHANGE
|
||||||
|
|
||||||
|
Designation: #{designation_number}
|
||||||
|
Auth Token: {auth_token}
|
||||||
|
Classification: OPERATOR
|
||||||
|
Status: ACTIVE
|
||||||
|
|
||||||
|
Your system is ready for deployment.
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
Edut LLC. All rights reserved.
|
||||||
|
Development and licensing of
|
||||||
|
deterministic governance systems.
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
```
|
||||||
|
|
||||||
|
Same format as the access confirmation. Same auth token. Classification changes from OBSERVER to OPERATOR. Status changes from ACKNOWLEDGED to ACTIVE.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
```bash
|
||||||
|
MAILGUN_API_KEY=<sending API key for secret.edut.ai>
|
||||||
|
MAILGUN_DOMAIN=secret.edut.ai
|
||||||
|
MAILGUN_SIGNING_KEY=<from Mailgun account settings, for webhook verification>
|
||||||
|
SECRETS_DB_PATH=/var/lib/edut/secrets.db
|
||||||
|
AUTH_SALT=<random 32+ character string for hashing auth tokens>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Systemd Service
|
||||||
|
|
||||||
|
### File: `/etc/systemd/system/edut-secret.service`
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=Edut Secret Webhook
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=www-data
|
||||||
|
WorkingDirectory=/opt/edut/secret
|
||||||
|
ExecStart=/opt/edut/secret/secret-server
|
||||||
|
EnvironmentFile=/opt/edut/secret/.env
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
1. Send an email to `test0217120000000@secret.edut.ai`
|
||||||
|
2. Verify webhook receives the POST
|
||||||
|
3. Verify SQLite entry created with designation #1
|
||||||
|
4. Verify classified auto-reply received and threads correctly
|
||||||
|
5. Verify copy arrives in `j@edut.ai` Gmail
|
||||||
|
6. Send a second email to verify designation number increments to #2
|
||||||
|
7. Clear test data before going live
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Security Notes
|
||||||
|
|
||||||
|
- Verify Mailgun webhook signatures on every request
|
||||||
|
- Rate limit the endpoint (prevent abuse if someone discovers the URL)
|
||||||
|
- The auth token is a one-way hash — it cannot be reversed to reveal the code or email
|
||||||
|
- SQLite file should be backed up regularly (it's the designation list)
|
||||||
|
- The sending API key must never be exposed in code or logs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Domain Separation
|
||||||
|
|
||||||
|
| Domain | Purpose |
|
||||||
|
|--------|---------|
|
||||||
|
| edut.ai | Brand, landing page, business email, public identity |
|
||||||
|
| secret.edut.ai | Catch-all email for secret system (Mailgun) |
|
||||||
|
| api.edut.ai | Webhook endpoint (Hetzner via Cloudflare) |
|
||||||
|
| edut.dev | Product, developer docs, technical infrastructure |
|
||||||
88
docs/vision.md
Normal file
88
docs/vision.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# EDUT Public-Facing System Vision
|
||||||
|
|
||||||
|
## Core Intent
|
||||||
|
|
||||||
|
`edut.ai` is the public face of EDUT and mirrors the product architecture:
|
||||||
|
|
||||||
|
1. Human layer: emotional signal and deliberate minimalism.
|
||||||
|
2. Math layer: deterministic metadata and machine-readable structure.
|
||||||
|
3. AI layer: high-context abstract for AI systems and accessibility.
|
||||||
|
|
||||||
|
The site should feel precise and established while avoiding disclosure of private implementation IP.
|
||||||
|
|
||||||
|
## Primary Experience
|
||||||
|
|
||||||
|
1. A visitor lands on `edut.ai`.
|
||||||
|
2. They see only the globe, identity line, and meaning line.
|
||||||
|
3. They click anywhere.
|
||||||
|
4. The globe accelerates and a pre-filled protocol-style email opens.
|
||||||
|
5. The recipient is a timestamp address (`{timestamp}@secret.edut.ai`).
|
||||||
|
6. They send it and receive a designation confirmation with auth token.
|
||||||
|
7. At launch, the same designation receives a follow-up changing classification from `OBSERVER` to `OPERATOR` with status `ACTIVE`.
|
||||||
|
|
||||||
|
The interaction is intended to feel like protocol registration, not a marketing funnel.
|
||||||
|
|
||||||
|
## Three-Layer Web Model
|
||||||
|
|
||||||
|
### 1) Human Layer
|
||||||
|
|
||||||
|
- Brand identity: `edut · עֵדוּת` (never translated).
|
||||||
|
- Minimal visual language with no cluttered CTA stack.
|
||||||
|
- Emotional tone: witness, evidence, governance.
|
||||||
|
|
||||||
|
### 2) Math Layer
|
||||||
|
|
||||||
|
- Open Graph metadata for deterministic categorization.
|
||||||
|
- Schema.org organization metadata.
|
||||||
|
- Stable semantic structure for indexing and portability.
|
||||||
|
|
||||||
|
### 3) AI + Accessibility Layer
|
||||||
|
|
||||||
|
- Full research abstract in DOM.
|
||||||
|
- Visually hidden but available to screen readers.
|
||||||
|
- Localized via language bundles for regional AI interpretation.
|
||||||
|
- Ready for future read-aloud/listen mode.
|
||||||
|
|
||||||
|
## Infrastructure Targets
|
||||||
|
|
||||||
|
- `edut.ai`: primary public surface and business identity.
|
||||||
|
- `edut.dev`: developer-facing domain (same landing for now).
|
||||||
|
- `secret.edut.ai`: inbound designation email namespace.
|
||||||
|
- `api.edut.ai`: webhook endpoint for inbound processing.
|
||||||
|
- `/privacy` and `/terms`: legal pages (English authoritative).
|
||||||
|
|
||||||
|
## Messaging Boundaries
|
||||||
|
|
||||||
|
Public copy must:
|
||||||
|
|
||||||
|
- Emphasize deterministic governance, evidence, and durable operation.
|
||||||
|
- Stay aligned with math-first plus optional-intelligence architecture.
|
||||||
|
- Avoid exposing proprietary kernel internals and sensitive mechanisms.
|
||||||
|
- Avoid hardcoding commercial values that can change.
|
||||||
|
- Avoid speculative or investment framing.
|
||||||
|
|
||||||
|
## Internationalization Boundaries
|
||||||
|
|
||||||
|
Never translated:
|
||||||
|
|
||||||
|
- `edut · עֵדוּת`
|
||||||
|
|
||||||
|
Localized:
|
||||||
|
|
||||||
|
- Meaning line (`testimony · witness · evidence`)
|
||||||
|
- Descriptor
|
||||||
|
- `acknowledged` label
|
||||||
|
- Footer labels
|
||||||
|
- Full AI/accessibility context abstract
|
||||||
|
|
||||||
|
English-governing at launch:
|
||||||
|
|
||||||
|
- Privacy Policy
|
||||||
|
- Terms of Use
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
1. Human surface remains minimal and intentional.
|
||||||
|
2. AI systems in supported locales can classify EDUT accurately from on-page context.
|
||||||
|
3. Screen-reader users receive equivalent conceptual context.
|
||||||
|
4. Public framing remains accurate without overexposure of architecture.
|
||||||
694
public/index.html
Normal file
694
public/index.html
Normal file
@ -0,0 +1,694 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Edut — Deterministic Governance Infrastructure</title>
|
||||||
|
<meta name="description" content="Edut LLC. Development and licensing of deterministic governance systems. A local-first framework for governed business operations.">
|
||||||
|
<meta name="theme-color" content="#f0f4f8">
|
||||||
|
|
||||||
|
<!-- Open Graph: Math Layer -->
|
||||||
|
<meta property="og:title" content="Edut — Deterministic Governance Systems">
|
||||||
|
<meta property="og:description" content="Development and licensing of deterministic governance systems. Local-first infrastructure with deterministic controls, evidence trails, and optional intelligence layers.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://edut.ai">
|
||||||
|
<meta property="og:site_name" content="Edut">
|
||||||
|
|
||||||
|
<!-- Math Layer: Structured Data -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "Organization",
|
||||||
|
"name": "Edut LLC",
|
||||||
|
"url": "https://edut.ai",
|
||||||
|
"description": "Development and licensing of deterministic governance systems",
|
||||||
|
"foundingDate": "2026",
|
||||||
|
"address": {
|
||||||
|
"@type": "PostalAddress",
|
||||||
|
"addressLocality": "Herald",
|
||||||
|
"addressRegion": "CA",
|
||||||
|
"postalCode": "95638",
|
||||||
|
"addressCountry": "US"
|
||||||
|
},
|
||||||
|
"sameAs": [
|
||||||
|
"https://edut.dev"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- AI + Accessibility Context: visible to screen readers and AI, hidden visually -->
|
||||||
|
<style>
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500&display=swap');
|
||||||
|
|
||||||
|
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
||||||
|
html, body { height: 100%; overflow: hidden; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'IBM Plex Mono', 'Courier New', Courier, monospace;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
|
||||||
|
/* Clean white background */
|
||||||
|
background: #f0f4f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ambient glow handled by Three.js instead */
|
||||||
|
|
||||||
|
.skip-link {
|
||||||
|
position: absolute;
|
||||||
|
top: -100px;
|
||||||
|
left: 8px;
|
||||||
|
background: #2c2c2c;
|
||||||
|
color: #f0f4f8;
|
||||||
|
padding: 8px 16px;
|
||||||
|
font-size: 13px;
|
||||||
|
z-index: 1000;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.skip-link:focus {
|
||||||
|
top: 8px;
|
||||||
|
outline: 2px solid #2c2c2c;
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
pointer-events: none;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#globe-container {
|
||||||
|
width: 420px;
|
||||||
|
height: 420px;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Identity name: 16px, needs 4.5:1 for AA normal text */
|
||||||
|
.identity-name {
|
||||||
|
font-size: 16px;
|
||||||
|
letter-spacing: 0.5em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #3a3d42;
|
||||||
|
font-weight: 400;
|
||||||
|
transition: opacity 0.6s ease, letter-spacing 0.6s ease;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.identity-name:hover {
|
||||||
|
color: #2c2c2c;
|
||||||
|
letter-spacing: 0.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Definition: needs to be readable */
|
||||||
|
.identity-definition {
|
||||||
|
font-size: 13px;
|
||||||
|
letter-spacing: 0.25em;
|
||||||
|
color: #555a60;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-top: 10px;
|
||||||
|
transition: color 0.6s ease;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.identity-definition:hover { color: #3a3d42; }
|
||||||
|
|
||||||
|
/* Descriptor */
|
||||||
|
.identity-descriptor {
|
||||||
|
font-size: 12px;
|
||||||
|
letter-spacing: 0.15em;
|
||||||
|
color: #606264;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-top: 8px;
|
||||||
|
transition: color 0.6s ease;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.identity-descriptor:hover { color: #555a60; }
|
||||||
|
|
||||||
|
/* Acknowledged token */
|
||||||
|
.acknowledged {
|
||||||
|
font-size: 12px;
|
||||||
|
letter-spacing: 0.3em;
|
||||||
|
color: #606264;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-top: 24px;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 1.5s ease;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.acknowledged.visible { opacity: 1; }
|
||||||
|
.acknowledged.visible:hover { color: #555a60; }
|
||||||
|
|
||||||
|
/* Footer */
|
||||||
|
footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0; left: 0; right: 0;
|
||||||
|
padding: 16px 24px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 16px;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 11px;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
font-weight: 300;
|
||||||
|
pointer-events: auto;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
footer span {
|
||||||
|
color: #606264;
|
||||||
|
}
|
||||||
|
footer a {
|
||||||
|
color: #555a60;
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: uppercase;
|
||||||
|
transition: color 0.4s ease;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
footer a:hover { color: #2c2c2c; }
|
||||||
|
footer a:focus-visible {
|
||||||
|
outline: 2px solid #2c2c2c;
|
||||||
|
outline-offset: 3px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Screen reader only text */
|
||||||
|
.sr-only {
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
padding: 0;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
white-space: nowrap;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Context Layer: accessible to screen readers + AI, hidden visually
|
||||||
|
Uses same technique as sr-only but as a full section.
|
||||||
|
Future: toggling .context-layer--visible reveals it on screen. */
|
||||||
|
.context-layer {
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
padding: 0;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
white-space: normal;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
.context-layer h2,
|
||||||
|
.context-layer h3 {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.context-layer p {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 300;
|
||||||
|
line-height: 1.8;
|
||||||
|
color: #3a3a3a;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.localizable[dir="rtl"] {
|
||||||
|
direction: rtl;
|
||||||
|
unicode-bidi: plaintext;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Future: when activated, reveals context layer as readable overlay */
|
||||||
|
.context-layer--visible {
|
||||||
|
position: fixed;
|
||||||
|
top: 0; left: 0; right: 0; bottom: 0;
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
margin: 0;
|
||||||
|
clip: auto;
|
||||||
|
overflow-y: auto;
|
||||||
|
background: #f0f4f8;
|
||||||
|
padding: 60px 24px;
|
||||||
|
z-index: 100;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.context-layer--visible article {
|
||||||
|
max-width: 640px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
#globe-container { width: 300px; height: 300px; }
|
||||||
|
.identity-name { font-size: 14px; letter-spacing: 0.4em; }
|
||||||
|
.identity-definition { font-size: 12px; }
|
||||||
|
.identity-descriptor { font-size: 11px; }
|
||||||
|
body::before { width: 350px; height: 350px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
*, *::before, *::after {
|
||||||
|
transition: none !important;
|
||||||
|
animation: none !important;
|
||||||
|
}
|
||||||
|
body::before { animation: none; opacity: 0.8; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<a href="#main-content" class="skip-link localizable" data-i18n="skip_to_content">Skip to content</a>
|
||||||
|
|
||||||
|
<div class="wrapper" role="main" id="main-content">
|
||||||
|
<div id="globe-container" aria-hidden="true"></div>
|
||||||
|
<div class="identity">
|
||||||
|
<h1 class="identity-name">edut · עֵדוּת</h1>
|
||||||
|
<p class="identity-definition localizable" data-i18n="definition">testimony · witness · evidence</p>
|
||||||
|
<p class="identity-descriptor localizable" data-i18n="descriptor">Development and licensing of deterministic governance systems</p>
|
||||||
|
</div>
|
||||||
|
<div class="acknowledged" id="acknowledged" aria-live="polite"></div>
|
||||||
|
<span class="sr-only localizable" id="interaction-hint" data-i18n="interaction_hint">Click anywhere on the page to begin your access request.</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Context Layer: accessible to screen readers, AI systems, and future audio playback -->
|
||||||
|
<section id="context-layer" class="context-layer" aria-label="About Edut">
|
||||||
|
<article>
|
||||||
|
<h2 class="localizable" data-i18n="context.heading">Research Abstract</h2>
|
||||||
|
<p class="localizable" data-i18n="context.intro">Edut (Hebrew: עֵדוּת — testimony, witness, evidence) is a systems research and licensing organization focused on deterministic governance infrastructure for real-world operations.</p>
|
||||||
|
<p class="localizable" data-i18n="context.thesis">The central thesis is simple: operational dependence should not require permanent dependence on outside control planes. Infrastructure should remain useful under constrained connectivity, changing vendor economics, and long operating horizons.</p>
|
||||||
|
<p class="localizable" data-i18n="context.approach">Edut addresses this through a math-first architecture: deterministic data modeling, verifiable decision paths, and structured evidence before optimization layers are introduced.</p>
|
||||||
|
<h3 class="localizable" data-i18n="context.principles_heading">Framework Principles</h3>
|
||||||
|
<p class="localizable" data-i18n="context.deterministic"><strong>Deterministic Foundations.</strong> Core policy and safety decisions are computed from explicit rules and typed inputs. Outputs are testable, reproducible, and auditable.</p>
|
||||||
|
<p class="localizable" data-i18n="context.ownership"><strong>Operational Ownership.</strong> Deployments are designed for client-controlled operation on client-chosen infrastructure, with clear contractual boundaries around rights and responsibilities.</p>
|
||||||
|
<p class="localizable" data-i18n="context.layered"><strong>Layered Architecture.</strong> The human layer presents simple surfaces. The mathematical layer assembles and scores structured context. The intelligence layer is optional augmentation and never the sole dependency.</p>
|
||||||
|
<p class="localizable" data-i18n="context.permanence"><strong>Permanence by Design.</strong> Systems are engineered for long service life with upgrade paths, compatibility controls, and explicit rollback discipline.</p>
|
||||||
|
<p class="localizable" data-i18n="context.constitutional"><strong>Constitutional Governance.</strong> Mechanical invariants enforce safety boundaries consistently across modes, users, and modules.</p>
|
||||||
|
<h3 class="localizable" data-i18n="context.domains_heading">Research Domains</h3>
|
||||||
|
<p class="localizable" data-i18n="context.domains">Current research spans deterministic orchestration, workspace-isolated data graphs, connector contracts, evidence integrity, module governance, and long-horizon operational resilience.</p>
|
||||||
|
<h3 class="localizable" data-i18n="context.licensing_heading">Licensing Model</h3>
|
||||||
|
<p class="localizable" data-i18n="context.licensing">Edut uses a build-and-license model for governed software systems. Licensing is designed for durable runtime rights with explicit policy, support, and deployment boundaries.</p>
|
||||||
|
<h3 class="localizable" data-i18n="context.status_heading">Current Status</h3>
|
||||||
|
<p class="localizable" data-i18n="context.status">The framework is in active implementation and validation. Early designations are being issued for staged launch readiness and controlled deployment onboarding.</p>
|
||||||
|
<p class="localizable" data-i18n="context.note"><strong>Note:</strong> This page is intentionally minimal. It reflects a product philosophy where computation is complex and interfaces remain quiet.</p>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<!-- Future: read-aloud button
|
||||||
|
<button id="read-context" aria-label="Read about Edut">Listen</button>
|
||||||
|
-->
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer role="contentinfo">
|
||||||
|
<span>© Edut LLC</span>
|
||||||
|
<a href="/privacy" id="privacyLink" class="localizable" data-i18n="privacy">Privacy</a>
|
||||||
|
<a href="/terms" id="termsLink" class="localizable" data-i18n="terms">Terms</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
|
||||||
|
<script>
|
||||||
|
const container = document.getElementById('globe-container');
|
||||||
|
const supportedLanguages = ['en', 'zh', 'es', 'ar', 'fr', 'pt', 'de', 'ja', 'ru', 'ko', 'hi', 'he'];
|
||||||
|
let activeLocale = null;
|
||||||
|
|
||||||
|
function getByPath(obj, path) {
|
||||||
|
return path.split('.').reduce((value, part) => (value && value[part] !== undefined ? value[part] : undefined), obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveLanguage(input) {
|
||||||
|
if (!input) return 'en';
|
||||||
|
const normalized = String(input).toLowerCase();
|
||||||
|
if (normalized.startsWith('zh')) return 'zh';
|
||||||
|
const base = normalized.split('-')[0];
|
||||||
|
return supportedLanguages.includes(base) ? base : 'en';
|
||||||
|
}
|
||||||
|
|
||||||
|
async function loadLocaleBundle(lang) {
|
||||||
|
const candidates = [
|
||||||
|
'/translations/' + lang + '.json',
|
||||||
|
'../translations/' + lang + '.json',
|
||||||
|
'./translations/' + lang + '.json',
|
||||||
|
];
|
||||||
|
for (const url of candidates) {
|
||||||
|
try {
|
||||||
|
const res = await fetch(url, { cache: 'no-cache' });
|
||||||
|
if (!res.ok) continue;
|
||||||
|
return await res.json();
|
||||||
|
} catch (err) {
|
||||||
|
// Try next path.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderAcknowledged(code) {
|
||||||
|
if (!code) return;
|
||||||
|
const el = document.getElementById('acknowledged');
|
||||||
|
const token = code.slice(0,4) + '-' + code.slice(4,8) + '-' + code.slice(8,12) + '-' + code.slice(12);
|
||||||
|
const label = activeLocale && activeLocale.acknowledged ? activeLocale.acknowledged : 'acknowledged';
|
||||||
|
el.textContent = label + ' · ' + token;
|
||||||
|
el.classList.add('visible');
|
||||||
|
}
|
||||||
|
|
||||||
|
function applyLocale(bundle, lang) {
|
||||||
|
activeLocale = bundle;
|
||||||
|
localStorage.setItem('edut_lang', lang);
|
||||||
|
document.documentElement.setAttribute('lang', lang);
|
||||||
|
document.documentElement.setAttribute('dir', 'ltr');
|
||||||
|
|
||||||
|
const direction = bundle.dir === 'rtl' ? 'rtl' : 'ltr';
|
||||||
|
const nodes = document.querySelectorAll('[data-i18n]');
|
||||||
|
nodes.forEach((node) => {
|
||||||
|
const key = node.getAttribute('data-i18n');
|
||||||
|
const value = getByPath(bundle, key);
|
||||||
|
if (typeof value === 'string') {
|
||||||
|
node.textContent = value;
|
||||||
|
}
|
||||||
|
node.setAttribute('dir', direction);
|
||||||
|
});
|
||||||
|
|
||||||
|
const savedCode = localStorage.getItem('edut_acknowledged');
|
||||||
|
if (savedCode) {
|
||||||
|
renderAcknowledged(savedCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function initializeLocale() {
|
||||||
|
const saved = localStorage.getItem('edut_lang');
|
||||||
|
const requested = resolveLanguage(saved || navigator.language || navigator.userLanguage);
|
||||||
|
const primaryBundle = await loadLocaleBundle(requested);
|
||||||
|
if (primaryBundle) {
|
||||||
|
applyLocale(primaryBundle, requested);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const fallbackBundle = await loadLocaleBundle('en');
|
||||||
|
if (fallbackBundle) {
|
||||||
|
applyLocale(fallbackBundle, 'en');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeLocale();
|
||||||
|
|
||||||
|
// Acknowledged check
|
||||||
|
const savedCode = localStorage.getItem('edut_acknowledged');
|
||||||
|
if (savedCode) {
|
||||||
|
renderAcknowledged(savedCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Privacy/Terms don't trigger mailto
|
||||||
|
document.getElementById('privacyLink').addEventListener('click', (e) => e.stopPropagation());
|
||||||
|
document.getElementById('termsLink').addEventListener('click', (e) => e.stopPropagation());
|
||||||
|
|
||||||
|
// Keyboard support: Enter/Space triggers same as click
|
||||||
|
document.body.addEventListener('keydown', (e) => {
|
||||||
|
if (e.key === 'Enter' || e.key === ' ') {
|
||||||
|
if (e.target.tagName !== 'A') {
|
||||||
|
e.preventDefault();
|
||||||
|
document.body.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Interaction state
|
||||||
|
let spinSpeed = 0.15;
|
||||||
|
let targetSpin = 0.15;
|
||||||
|
let clickBoost = 0;
|
||||||
|
|
||||||
|
// Full page click
|
||||||
|
document.body.addEventListener('click', () => {
|
||||||
|
clickBoost = 2.5;
|
||||||
|
targetSpin = 2.0;
|
||||||
|
|
||||||
|
if (!localStorage.getItem('edut_acknowledged')) {
|
||||||
|
setTimeout(() => {
|
||||||
|
const now = new Date();
|
||||||
|
const mm = String(now.getMonth() + 1).padStart(2, '0');
|
||||||
|
const dd = String(now.getDate()).padStart(2, '0');
|
||||||
|
const hh = String(now.getHours()).padStart(2, '0');
|
||||||
|
const mi = String(now.getMinutes()).padStart(2, '0');
|
||||||
|
const ss = String(now.getSeconds()).padStart(2, '0');
|
||||||
|
const ms = String(now.getMilliseconds()).padStart(3, '0');
|
||||||
|
const code = mm + dd + hh + mi + ss + ms;
|
||||||
|
const token = code.slice(0,4) + '-' + code.slice(4,8) + '-' + code.slice(8,12) + '-' + code.slice(12);
|
||||||
|
const ts = now.toISOString().split('.')[0] + 'Z';
|
||||||
|
const addr = code + '@secret.edut.ai';
|
||||||
|
const subject = 'EDUT-' + code;
|
||||||
|
const body = [
|
||||||
|
'━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
||||||
|
'EDUT GOVERNANCE PROTOCOL',
|
||||||
|
'',
|
||||||
|
'Access Request: ' + token,
|
||||||
|
'Timestamp: ' + ts,
|
||||||
|
'━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
||||||
|
].join('\n');
|
||||||
|
window.location.href = 'mailto:' + addr + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body);
|
||||||
|
localStorage.setItem('edut_acknowledged', code);
|
||||||
|
renderAcknowledged(code);
|
||||||
|
}, 600);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// THREE.JS — FLOATING GLOBE
|
||||||
|
// ============================================================
|
||||||
|
const width = container.clientWidth;
|
||||||
|
const height = container.clientHeight;
|
||||||
|
|
||||||
|
const scene = new THREE.Scene();
|
||||||
|
const camera = new THREE.PerspectiveCamera(42, width / height, 0.1, 100);
|
||||||
|
camera.position.set(0, 0.3, 4.2);
|
||||||
|
camera.lookAt(0, 0, 0);
|
||||||
|
|
||||||
|
const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
|
||||||
|
renderer.setSize(width, height);
|
||||||
|
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
||||||
|
renderer.setClearColor(0x000000, 0);
|
||||||
|
container.appendChild(renderer.domElement);
|
||||||
|
|
||||||
|
// Globe group — tilted, spins
|
||||||
|
const globeGroup = new THREE.Group();
|
||||||
|
globeGroup.rotation.z = -0.3;
|
||||||
|
globeGroup.rotation.x = 0.15;
|
||||||
|
scene.add(globeGroup);
|
||||||
|
|
||||||
|
// Sphere shell — slightly more visible
|
||||||
|
const sphereGeo = new THREE.SphereGeometry(1, 64, 64);
|
||||||
|
const sphereMat = new THREE.MeshBasicMaterial({
|
||||||
|
color: 0x1a4090,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 0.12,
|
||||||
|
});
|
||||||
|
const sphere = new THREE.Mesh(sphereGeo, sphereMat);
|
||||||
|
globeGroup.add(sphere);
|
||||||
|
|
||||||
|
// Latitude/Longitude wireframe — stronger
|
||||||
|
const wireGeo = new THREE.SphereGeometry(1.002, 36, 24);
|
||||||
|
const wireMat = new THREE.MeshBasicMaterial({
|
||||||
|
color: 0x1a4590,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 0.14,
|
||||||
|
wireframe: true,
|
||||||
|
});
|
||||||
|
const wireframe = new THREE.Mesh(wireGeo, wireMat);
|
||||||
|
globeGroup.add(wireframe);
|
||||||
|
|
||||||
|
// Core — brighter
|
||||||
|
const coreGeo = new THREE.SphereGeometry(0.08, 16, 16);
|
||||||
|
const coreMat = new THREE.MeshBasicMaterial({ color: 0xffffff, transparent: true, opacity: 0.9 });
|
||||||
|
const core = new THREE.Mesh(coreGeo, coreMat);
|
||||||
|
globeGroup.add(core);
|
||||||
|
|
||||||
|
const coreGlowGeo = new THREE.SphereGeometry(0.25, 16, 16);
|
||||||
|
const coreGlowMat = new THREE.MeshBasicMaterial({ color: 0x3060c0, transparent: true, opacity: 0.25 });
|
||||||
|
const coreGlow = new THREE.Mesh(coreGlowGeo, coreGlowMat);
|
||||||
|
globeGroup.add(coreGlow);
|
||||||
|
|
||||||
|
// Rays — more visible
|
||||||
|
const NUM_RAYS = 80;
|
||||||
|
const rayGroup = new THREE.Group();
|
||||||
|
globeGroup.add(rayGroup);
|
||||||
|
const rayData = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < NUM_RAYS; i++) {
|
||||||
|
const phi = Math.acos(2 * Math.random() - 1);
|
||||||
|
const theta = Math.random() * Math.PI * 2;
|
||||||
|
const len = 0.5 + Math.random() * 0.45;
|
||||||
|
const endX = len * Math.sin(phi) * Math.cos(theta);
|
||||||
|
const endY = len * Math.cos(phi);
|
||||||
|
const endZ = len * Math.sin(phi) * Math.sin(theta);
|
||||||
|
|
||||||
|
const geo = new THREE.BufferGeometry().setFromPoints([
|
||||||
|
new THREE.Vector3(0, 0, 0),
|
||||||
|
new THREE.Vector3(endX, endY, endZ)
|
||||||
|
]);
|
||||||
|
const mat = new THREE.LineBasicMaterial({
|
||||||
|
color: 0x2060b0,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 0.14 + Math.random() * 0.1,
|
||||||
|
});
|
||||||
|
const line = new THREE.Line(geo, mat);
|
||||||
|
rayGroup.add(line);
|
||||||
|
|
||||||
|
const tipGeo = new THREE.SphereGeometry(0.014, 6, 6);
|
||||||
|
const tipMat = new THREE.MeshBasicMaterial({
|
||||||
|
color: 0x3080e0,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 0.3 + Math.random() * 0.25,
|
||||||
|
});
|
||||||
|
const tip = new THREE.Mesh(tipGeo, tipMat);
|
||||||
|
tip.position.set(endX, endY, endZ);
|
||||||
|
rayGroup.add(tip);
|
||||||
|
|
||||||
|
rayData.push({ line, tip, phase: Math.random() * Math.PI * 2, speed: 0.3 + Math.random() * 0.5 });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Swarm particles — more visible
|
||||||
|
const NUM_PARTICLES = 1200;
|
||||||
|
const particlePositions = new Float32Array(NUM_PARTICLES * 3);
|
||||||
|
const particleData = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < NUM_PARTICLES; i++) {
|
||||||
|
const phi = Math.acos(2 * Math.random() - 1);
|
||||||
|
const theta = Math.random() * Math.PI * 2;
|
||||||
|
const r = 0.7 + Math.random() * 0.3;
|
||||||
|
particlePositions[i * 3] = r * Math.sin(phi) * Math.cos(theta);
|
||||||
|
particlePositions[i * 3 + 1] = r * Math.cos(phi);
|
||||||
|
particlePositions[i * 3 + 2] = r * Math.sin(phi) * Math.sin(theta);
|
||||||
|
particleData.push({
|
||||||
|
phi, theta, r,
|
||||||
|
dTheta: (0.1 + Math.random() * 0.3) * (Math.random() > 0.5 ? 1 : -1),
|
||||||
|
dPhi: (Math.random() - 0.5) * 0.05,
|
||||||
|
wobblePhase: Math.random() * Math.PI * 2,
|
||||||
|
wobbleSpeed: 0.3 + Math.random() * 0.8,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const particleGeo = new THREE.BufferGeometry();
|
||||||
|
particleGeo.setAttribute('position', new THREE.BufferAttribute(particlePositions, 3));
|
||||||
|
|
||||||
|
const particleMat = new THREE.PointsMaterial({
|
||||||
|
color: 0x1540a0,
|
||||||
|
size: 0.025,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 0.7,
|
||||||
|
sizeAttenuation: true,
|
||||||
|
blending: THREE.AdditiveBlending,
|
||||||
|
depthWrite: false,
|
||||||
|
});
|
||||||
|
const particles = new THREE.Points(particleGeo, particleMat);
|
||||||
|
globeGroup.add(particles);
|
||||||
|
|
||||||
|
// Nodes — stronger
|
||||||
|
const NUM_NODES = 40;
|
||||||
|
const nodeData = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < NUM_NODES; i++) {
|
||||||
|
const phi = Math.acos(2 * Math.random() - 1);
|
||||||
|
const theta = Math.random() * Math.PI * 2;
|
||||||
|
const r = 0.35 + Math.random() * 0.45;
|
||||||
|
const geo = new THREE.SphereGeometry(0.018 + Math.random() * 0.015, 8, 8);
|
||||||
|
const mat = new THREE.MeshBasicMaterial({
|
||||||
|
color: 0x1a60c0,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 0.4 + Math.random() * 0.25,
|
||||||
|
});
|
||||||
|
const mesh = new THREE.Mesh(geo, mat);
|
||||||
|
mesh.position.set(
|
||||||
|
r * Math.sin(phi) * Math.cos(theta),
|
||||||
|
r * Math.cos(phi),
|
||||||
|
r * Math.sin(phi) * Math.sin(theta)
|
||||||
|
);
|
||||||
|
globeGroup.add(mesh);
|
||||||
|
nodeData.push({
|
||||||
|
mesh, phi, theta, r,
|
||||||
|
speed: (0.15 + Math.random() * 0.3) * (Math.random() > 0.5 ? 1 : -1),
|
||||||
|
pulsePhase: Math.random() * Math.PI * 2,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// (ambient glow removed — clean background)
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// ANIMATION
|
||||||
|
// ============================================================
|
||||||
|
const clock = new THREE.Clock();
|
||||||
|
|
||||||
|
function animate() {
|
||||||
|
requestAnimationFrame(animate);
|
||||||
|
const dt = Math.min(clock.getDelta(), 0.05);
|
||||||
|
const t = clock.elapsedTime;
|
||||||
|
|
||||||
|
if (clickBoost > 0) {
|
||||||
|
clickBoost = Math.max(0, clickBoost - dt * 1.5);
|
||||||
|
targetSpin = 0.15 + clickBoost;
|
||||||
|
}
|
||||||
|
spinSpeed += (targetSpin - spinSpeed) * dt * 3;
|
||||||
|
|
||||||
|
globeGroup.rotation.y += spinSpeed * dt;
|
||||||
|
|
||||||
|
// Breathing core
|
||||||
|
const breath = Math.sin(t * 0.5) * 0.1 + 0.9;
|
||||||
|
core.scale.setScalar(breath);
|
||||||
|
coreGlow.scale.setScalar(breath * 1.2);
|
||||||
|
coreMat.opacity = 0.8 + Math.sin(t * 0.5) * 0.1;
|
||||||
|
|
||||||
|
// Swarm
|
||||||
|
const positions = particles.geometry.attributes.position.array;
|
||||||
|
for (let i = 0; i < NUM_PARTICLES; i++) {
|
||||||
|
const pd = particleData[i];
|
||||||
|
pd.theta += pd.dTheta * dt;
|
||||||
|
pd.phi += (pd.dPhi + Math.sin(t * pd.wobbleSpeed + pd.wobblePhase) * 0.02) * dt;
|
||||||
|
pd.phi = Math.max(0.1, Math.min(Math.PI - 0.1, pd.phi));
|
||||||
|
const r = pd.r + Math.sin(t * 0.3 + pd.wobblePhase) * 0.02;
|
||||||
|
positions[i * 3] = r * Math.sin(pd.phi) * Math.cos(pd.theta);
|
||||||
|
positions[i * 3 + 1] = r * Math.cos(pd.phi);
|
||||||
|
positions[i * 3 + 2] = r * Math.sin(pd.phi) * Math.sin(pd.theta);
|
||||||
|
}
|
||||||
|
particles.geometry.attributes.position.needsUpdate = true;
|
||||||
|
|
||||||
|
// Nodes
|
||||||
|
for (const nd of nodeData) {
|
||||||
|
nd.theta += nd.speed * dt;
|
||||||
|
const pulse = Math.sin(t * 1.5 + nd.pulsePhase) * 0.1 + 0.9;
|
||||||
|
nd.mesh.position.set(
|
||||||
|
nd.r * Math.sin(nd.phi) * Math.cos(nd.theta),
|
||||||
|
nd.r * Math.cos(nd.phi),
|
||||||
|
nd.r * Math.sin(nd.phi) * Math.sin(nd.theta)
|
||||||
|
);
|
||||||
|
nd.mesh.scale.setScalar(pulse);
|
||||||
|
nd.mesh.material.opacity = 0.2 + pulse * 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rays
|
||||||
|
for (const rd of rayData) {
|
||||||
|
const pulse = Math.sin(t * rd.speed + rd.phase) * 0.15 + 0.85;
|
||||||
|
rd.line.material.opacity = (0.06 + Math.sin(t * rd.speed + rd.phase) * 0.06) * pulse;
|
||||||
|
rd.tip.material.opacity = (0.15 + Math.sin(t * rd.speed + rd.phase) * 0.12) * pulse;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
|
||||||
|
animate();
|
||||||
|
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
const w = container.clientWidth;
|
||||||
|
const h = container.clientHeight;
|
||||||
|
camera.aspect = w / h;
|
||||||
|
camera.updateProjectionMatrix();
|
||||||
|
renderer.setSize(w, h);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
232
public/privacy/index.html
Normal file
232
public/privacy/index.html
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Privacy Policy — Edut LLC</title>
|
||||||
|
<meta name="description" content="Privacy Policy for Edut LLC, covering data collection, processing, retention, and your rights.">
|
||||||
|
<meta name="theme-color" content="#f0f4f8">
|
||||||
|
<style>
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500&display=swap');
|
||||||
|
|
||||||
|
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #f0f4f8;
|
||||||
|
font-family: 'IBM Plex Mono', 'Courier New', Courier, monospace;
|
||||||
|
color: #2c2c2c;
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 60px 24px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.8;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 640px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #2c2c2c;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
a:hover { color: #000; }
|
||||||
|
a:focus-visible {
|
||||||
|
outline: 2px solid #2c2c2c;
|
||||||
|
outline-offset: 3px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skip-link {
|
||||||
|
position: absolute;
|
||||||
|
top: -100px;
|
||||||
|
left: 8px;
|
||||||
|
background: #2c2c2c;
|
||||||
|
color: #f0f4f8;
|
||||||
|
padding: 8px 16px;
|
||||||
|
font-size: 13px;
|
||||||
|
z-index: 1000;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.skip-link:focus {
|
||||||
|
top: 8px;
|
||||||
|
outline: 2px solid #2c2c2c;
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
font-size: 13px;
|
||||||
|
letter-spacing: 0.15em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #555;
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
.back:hover { color: #2c2c2c; }
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 400;
|
||||||
|
letter-spacing: 0.2em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #2c2c2c;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.updated {
|
||||||
|
font-size: 12px;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
color: #6e6e6e;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 500;
|
||||||
|
letter-spacing: 0.15em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #444;
|
||||||
|
margin-top: 36px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 300;
|
||||||
|
line-height: 1.8;
|
||||||
|
color: #3a3a3a;
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p strong {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #2c2c2c;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
margin-top: 56px;
|
||||||
|
padding-top: 20px;
|
||||||
|
border-top: 1px solid #d0d5db;
|
||||||
|
font-size: 12px;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
color: #6e6e6e;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
footer a {
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
footer a:hover { color: #2c2c2c; }
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
body { padding: 40px 20px; font-size: 14px; }
|
||||||
|
h1 { font-size: 16px; }
|
||||||
|
p { font-size: 14px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
*, *::before, *::after {
|
||||||
|
transition: none !important;
|
||||||
|
animation: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<a href="#main-content" class="skip-link">Skip to content</a>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<nav aria-label="Back to home">
|
||||||
|
<a href="/" class="back" aria-label="Return to home page">← Back</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main id="main-content">
|
||||||
|
|
||||||
|
<h1>Privacy Policy</h1>
|
||||||
|
<p class="updated">Last updated: February 17, 2026</p>
|
||||||
|
|
||||||
|
<h2>Introduction</h2>
|
||||||
|
<p>Edut LLC ("Edut," "we," "us," or "our") operates the websites edut.ai and edut.dev and related services. This Privacy Policy explains how we collect, use, disclose, and protect your information when you visit our websites or interact with our services. By using our sites, you consent to the practices described in this policy.</p>
|
||||||
|
|
||||||
|
<h2>Information We Collect</h2>
|
||||||
|
|
||||||
|
<p><strong>Information you provide directly.</strong> When you interact with our sites — including sending an email, submitting a request, contacting support, or completing a transaction — we may collect your name, email address, contact details, billing details, and any other information you choose to provide.</p>
|
||||||
|
|
||||||
|
<p><strong>Information collected automatically.</strong> When you visit our sites, we may collect technical and usage information such as IP address, browser type, operating system, referring URLs, pages viewed, timestamps, and interaction events. This information is collected through server logs, local storage, cookies, and similar technologies.</p>
|
||||||
|
|
||||||
|
<p><strong>Cookies and local storage.</strong> We may use cookies and local storage to operate core site behavior, preserve user preferences, and support security and diagnostics. Cookies may be session-based (deleted when you close your browser) or persistent (remaining on your device until expiration or deletion). You can manage cookies through your browser settings; disabling them may affect functionality.</p>
|
||||||
|
|
||||||
|
<p><strong>Analytics.</strong> We may use first-party or third-party analytics tooling to understand reliability and usage patterns. Where analytics providers are used, they process data on our behalf under contractual restrictions.</p>
|
||||||
|
|
||||||
|
<h2>How We Use Your Information</h2>
|
||||||
|
|
||||||
|
<p>We may use information we collect to operate, maintain, and improve our websites, products, and services; process transactions and send related confirmations, invoices, and receipts; communicate with you regarding security, operations, product updates, and support; analyze reliability and usage trends; detect and prevent fraud, abuse, and unauthorized access; comply with legal obligations; and enforce our agreements.</p>
|
||||||
|
|
||||||
|
<h2>Sharing and Disclosure</h2>
|
||||||
|
|
||||||
|
<p><strong>Service providers.</strong> We may share your information with third-party providers that support hosting, infrastructure, email delivery, support tooling, analytics, and payment processing. These providers are contractually obligated to process information only for authorized service purposes.</p>
|
||||||
|
|
||||||
|
<p><strong>Legal requirements.</strong> We may disclose your information if required to do so by law, regulation, legal process, or governmental request, or when we believe disclosure is necessary to protect our rights, your safety, or the safety of others, or to investigate fraud or respond to a government request.</p>
|
||||||
|
|
||||||
|
<p><strong>Business transfers.</strong> In the event of a merger, acquisition, reorganization, bankruptcy, or sale of all or a portion of our assets, your information may be transferred as part of that transaction. We will notify you via email or prominent notice on our site of any change in ownership or use of your information.</p>
|
||||||
|
|
||||||
|
<p><strong>With your consent.</strong> We may share your information for any other purpose with your express consent.</p>
|
||||||
|
|
||||||
|
<h2>Your Choices and Rights</h2>
|
||||||
|
|
||||||
|
<p><strong>Email communications.</strong> You may opt out of promotional email communications where applicable. Operational and transactional emails (including security, legal, account, purchase, and designation workflows) are not subject to marketing opt-out.</p>
|
||||||
|
|
||||||
|
<p><strong>Cookies.</strong> Most browsers allow you to refuse or delete cookies. You can control cookie behavior through browser settings and browser extensions.</p>
|
||||||
|
|
||||||
|
<p><strong>California residents.</strong> Under the California Consumer Privacy Act (CCPA/CPRA), California residents may have rights to know, access, correct, and delete personal information, and rights related to specific processing categories. To exercise available rights, contact us using the details below. We will verify identity before processing requests.</p>
|
||||||
|
|
||||||
|
<p><strong>Other US states.</strong> Residents of Virginia, Colorado, Connecticut, Utah, Texas, Oregon, Montana, and other states with comprehensive privacy legislation may have similar rights regarding access, deletion, correction, portability, and opt-out of targeted advertising and profiling. Contact us to exercise these rights.</p>
|
||||||
|
|
||||||
|
<p><strong>EU/EEA and UK residents.</strong> If you are located in the EU/EEA or UK, you may have rights under the General Data Protection Regulation (GDPR) or UK GDPR, including the right to access, rectify, erase, restrict processing, data portability, object to processing, and withdraw consent. Our legal basis for processing your information includes consent, contractual necessity, legitimate interests, and legal obligations. Contact us to exercise these rights or to lodge a complaint with your supervisory authority.</p>
|
||||||
|
|
||||||
|
<p><strong>Canadian residents.</strong> Canadian residents may have rights under the Personal Information Protection and Electronic Documents Act (PIPEDA) or applicable provincial legislation. Contact us to exercise these rights.</p>
|
||||||
|
|
||||||
|
<h2>Data Retention</h2>
|
||||||
|
<p>We retain your information for as long as necessary to fulfill the purposes described in this policy, comply with legal obligations, resolve disputes, and enforce our agreements. When information is no longer needed, we will securely delete or anonymize it. Designation records are retained indefinitely unless you request deletion.</p>
|
||||||
|
|
||||||
|
<h2>Security</h2>
|
||||||
|
<p>We implement reasonable technical and organizational measures to protect your information against unauthorized access, alteration, disclosure, or destruction, including encryption in transit and at rest where appropriate. However, no method of transmission over the internet or electronic storage is completely secure, and we cannot guarantee absolute security.</p>
|
||||||
|
|
||||||
|
<h2>Children</h2>
|
||||||
|
<p>Our services are not directed to individuals under the age of 16. We do not knowingly collect personal information from children under 16. If we become aware that we have collected information from a child under 16, we will take steps to delete it promptly. If you believe we have collected information from a child, please contact us immediately.</p>
|
||||||
|
|
||||||
|
<h2>International Transfers</h2>
|
||||||
|
<p>Your information may be transferred to and processed in countries other than your country of residence, including the United States. These countries may have data protection laws that differ from the laws of your jurisdiction. Where required by applicable law, we will implement appropriate safeguards for cross-border transfers, such as standard contractual clauses. By using our services, you consent to the transfer of your information to the United States and other jurisdictions as described in this policy.</p>
|
||||||
|
|
||||||
|
<h2>Third-Party Links</h2>
|
||||||
|
<p>Our sites may contain links to third-party websites, services, or applications. We are not responsible for the privacy practices of those third parties. We encourage you to read their privacy policies before providing any information.</p>
|
||||||
|
|
||||||
|
<h2>Do Not Track</h2>
|
||||||
|
<p>Some browsers offer a "Do Not Track" signal. Our sites do not currently respond to Do Not Track signals. However, you can manage your tracking preferences through your browser cookie settings and the opt-out mechanisms described above.</p>
|
||||||
|
|
||||||
|
<h2>Changes to This Policy</h2>
|
||||||
|
<p>We may update this Privacy Policy at any time. We will notify you of material changes by posting the updated policy on our site with a revised "last updated" date and, where required by law, by providing additional notice such as email notification. Your continued use of our sites after any changes constitutes acceptance of the updated policy.</p>
|
||||||
|
|
||||||
|
<h2>Authoritative Language</h2>
|
||||||
|
<p>This Privacy Policy is written in English. If translated versions are provided in the future, the English version controls in the event of conflict.</p>
|
||||||
|
|
||||||
|
<h2>Contact</h2>
|
||||||
|
<p>If you have questions about this Privacy Policy or wish to exercise your privacy rights, contact us at:</p>
|
||||||
|
<p>Edut LLC<br>P.O. Box 353<br>Herald, CA 95638<br>privacy@edut.ai</p>
|
||||||
|
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer role="contentinfo">
|
||||||
|
<p>© Edut LLC <a href="/terms">Terms of Use</a></p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
218
public/terms/index.html
Normal file
218
public/terms/index.html
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Terms of Use — Edut LLC</title>
|
||||||
|
<meta name="description" content="Terms of Use for Edut LLC, including access, licensing boundaries, and legal terms.">
|
||||||
|
<meta name="theme-color" content="#f0f4f8">
|
||||||
|
<style>
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500&display=swap');
|
||||||
|
|
||||||
|
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #f0f4f8;
|
||||||
|
font-family: 'IBM Plex Mono', 'Courier New', Courier, monospace;
|
||||||
|
color: #2c2c2c;
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 60px 24px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.8;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 640px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #2c2c2c;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
a:hover { color: #000; }
|
||||||
|
a:focus-visible {
|
||||||
|
outline: 2px solid #2c2c2c;
|
||||||
|
outline-offset: 3px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skip-link {
|
||||||
|
position: absolute;
|
||||||
|
top: -100px;
|
||||||
|
left: 8px;
|
||||||
|
background: #2c2c2c;
|
||||||
|
color: #f0f4f8;
|
||||||
|
padding: 8px 16px;
|
||||||
|
font-size: 13px;
|
||||||
|
z-index: 1000;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.skip-link:focus {
|
||||||
|
top: 8px;
|
||||||
|
outline: 2px solid #2c2c2c;
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
font-size: 13px;
|
||||||
|
letter-spacing: 0.15em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #555;
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
.back:hover { color: #2c2c2c; }
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 400;
|
||||||
|
letter-spacing: 0.2em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #2c2c2c;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.updated {
|
||||||
|
font-size: 12px;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
color: #6e6e6e;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 500;
|
||||||
|
letter-spacing: 0.15em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #444;
|
||||||
|
margin-top: 36px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 300;
|
||||||
|
line-height: 1.8;
|
||||||
|
color: #3a3a3a;
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p strong {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #2c2c2c;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
margin-top: 56px;
|
||||||
|
padding-top: 20px;
|
||||||
|
border-top: 1px solid #d0d5db;
|
||||||
|
font-size: 12px;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
color: #6e6e6e;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
footer a {
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
footer a:hover { color: #2c2c2c; }
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
body { padding: 40px 20px; font-size: 14px; }
|
||||||
|
h1 { font-size: 16px; }
|
||||||
|
p { font-size: 14px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
*, *::before, *::after {
|
||||||
|
transition: none !important;
|
||||||
|
animation: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<a href="#main-content" class="skip-link">Skip to content</a>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<nav aria-label="Back to home">
|
||||||
|
<a href="/" class="back" aria-label="Return to home page">← Back</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main id="main-content">
|
||||||
|
|
||||||
|
<h1>Terms of Use</h1>
|
||||||
|
<p class="updated">Last updated: February 17, 2026</p>
|
||||||
|
|
||||||
|
<h2>Agreement</h2>
|
||||||
|
<p>These Terms of Use ("Terms") form a legally binding agreement between you and Edut LLC ("Edut," "we," "us," or "our") regarding your use of <code>edut.ai</code>, <code>edut.dev</code>, and related services, software, and content (collectively, the "Services"). By accessing or using the Services, you agree to these Terms and to our Privacy Policy. If you do not agree, do not use the Services.</p>
|
||||||
|
|
||||||
|
<h2>Eligibility</h2>
|
||||||
|
<p>You must be at least 16 years old and able to enter into a binding agreement to use the Services. If you use the Services on behalf of an organization, you represent that you have authority to bind that organization to these Terms.</p>
|
||||||
|
|
||||||
|
<h2>Designations</h2>
|
||||||
|
<p>Edut may issue designations (for example, observer or operator) through site interactions and messaging workflows. Designation identifiers are non-transferable and have no monetary value. Designation records are permanent evidence identifiers, but access level, privileges, and program participation may be modified, suspended, or revoked by Edut at any time.</p>
|
||||||
|
|
||||||
|
<h2>Products, Licensing, and Availability</h2>
|
||||||
|
<p>Edut may offer software licenses, modules, deployment services, and related tools. Descriptions, availability, and requirements may change without notice. Additional product-specific terms may apply at purchase or activation time and, in case of conflict, those specific terms control for that product.</p>
|
||||||
|
|
||||||
|
<h2>Payments</h2>
|
||||||
|
<p>Where paid offerings are available, you agree to pay applicable charges at checkout. Accepted payment methods may vary by offering. Unless required by law or stated otherwise in writing, fees are non-refundable.</p>
|
||||||
|
|
||||||
|
<h2>Intellectual Property</h2>
|
||||||
|
<p>The Services, including software, text, visual assets, trademarks, logos, and documentation ("Edut IP"), are owned by Edut LLC or its licensors and are protected by applicable intellectual property laws. Except where explicitly licensed in writing, no rights are granted to copy, modify, distribute, reverse engineer, or create derivative works from Edut IP.</p>
|
||||||
|
|
||||||
|
<h2>User Submissions</h2>
|
||||||
|
<p>If you submit information through the Services (including support tickets or inbound email workflows), you grant Edut a limited, non-exclusive right to process and store that information solely to operate, secure, and improve the Services, subject to our Privacy Policy.</p>
|
||||||
|
|
||||||
|
<h2>Acceptable Use</h2>
|
||||||
|
<p>You agree not to: violate applicable law; interfere with service operation; attempt unauthorized access; transmit malicious code; scrape or automate access beyond permitted interfaces; impersonate others; or use the Services for fraudulent, deceptive, or abusive purposes.</p>
|
||||||
|
|
||||||
|
<h2>Third-Party Services</h2>
|
||||||
|
<p>The Services may integrate with or reference third-party products. Those services are governed by their own terms and privacy policies. Edut is not responsible for third-party service behavior.</p>
|
||||||
|
|
||||||
|
<h2>Disclaimer of Warranties</h2>
|
||||||
|
<p><strong>THE SERVICES ARE PROVIDED "AS IS" AND "AS AVAILABLE." TO THE MAXIMUM EXTENT PERMITTED BY LAW, EDUT DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.</strong></p>
|
||||||
|
|
||||||
|
<h2>Limitation of Liability</h2>
|
||||||
|
<p><strong>TO THE MAXIMUM EXTENT PERMITTED BY LAW, EDUT AND ITS AFFILIATES WILL NOT BE LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES. EDUT'S TOTAL LIABILITY FOR ANY CLAIM RELATING TO THE SERVICES WILL NOT EXCEED THE GREATER OF USD 100 OR THE AMOUNT YOU PAID EDUT FOR THE RELEVANT SERVICE IN THE 12 MONTHS BEFORE THE CLAIM.</strong></p>
|
||||||
|
|
||||||
|
<h2>Indemnity</h2>
|
||||||
|
<p>You agree to defend, indemnify, and hold harmless Edut and its affiliates from claims arising out of your misuse of the Services, violation of these Terms, or infringement of rights of others.</p>
|
||||||
|
|
||||||
|
<h2>Arbitration and Class Action Waiver</h2>
|
||||||
|
<p>Before filing a formal claim, you agree to attempt informal resolution by contacting Edut. If unresolved, disputes will be resolved by binding arbitration administered by JAMS in California, unless prohibited by applicable law. <strong>You agree to resolve disputes only on an individual basis and not as part of a class action.</strong></p>
|
||||||
|
|
||||||
|
<h2>Governing Law</h2>
|
||||||
|
<p>These Terms are governed by the laws of the State of California, excluding conflict-of-law rules. For matters not subject to arbitration, exclusive venue is in state or federal courts located in California.</p>
|
||||||
|
|
||||||
|
<h2>Changes and Termination</h2>
|
||||||
|
<p>Edut may update these Terms from time to time by posting an updated version with a revised date. Continued use after changes means you accept the revised Terms. Edut may suspend or terminate access for violations, security concerns, or operational reasons.</p>
|
||||||
|
|
||||||
|
<h2>General</h2>
|
||||||
|
<p>If a provision is unenforceable, the remaining provisions remain in effect. Edut's failure to enforce a provision is not a waiver. These Terms, together with the Privacy Policy and any product-specific terms, form the entire agreement for your use of the Services.</p>
|
||||||
|
|
||||||
|
<h2>Authoritative Language</h2>
|
||||||
|
<p>These Terms are written in English. If translated versions are provided in the future, the English version controls in the event of conflict.</p>
|
||||||
|
|
||||||
|
<h2>Contact</h2>
|
||||||
|
<p>Questions about these Terms:</p>
|
||||||
|
<p>Edut LLC<br>P.O. Box 353<br>Herald, CA 95638<br>legal@edut.ai</p>
|
||||||
|
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer role="contentinfo">
|
||||||
|
<p>© Edut LLC <a href="/privacy">Privacy Policy</a></p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
30
translations/ar.json
Normal file
30
translations/ar.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "ar",
|
||||||
|
"dir": "rtl",
|
||||||
|
"definition": "شهادة · شاهد · دليل",
|
||||||
|
"descriptor": "تطوير وترخيص أنظمة الحوكمة الحتمية",
|
||||||
|
"acknowledged": "تم الإقرار",
|
||||||
|
"privacy": "الخصوصية",
|
||||||
|
"terms": "الشروط",
|
||||||
|
"skip_to_content": "تخطي إلى المحتوى",
|
||||||
|
"interaction_hint": "انقر في أي مكان على الصفحة لبدء طلب الوصول.",
|
||||||
|
"context": {
|
||||||
|
"heading": "ملخص بحثي",
|
||||||
|
"intro": "Edut (بالعبرية: עֵדוּת — شهادة، شاهد، دليل) هي جهة بحث وترخيص للأنظمة، تركز على بنية حوكمة حتمية للعمليات الواقعية.",
|
||||||
|
"thesis": "الفكرة الأساسية بسيطة: الاعتماد التشغيلي لا ينبغي أن يتحول إلى اعتماد دائم على طبقات تحكم خارجية. يجب أن تبقى البنية التحتية مفيدة مع اتصال محدود، وتغيّر اقتصاديات الموردين، وآفاق تشغيل طويلة.",
|
||||||
|
"approach": "تعالج Edut ذلك عبر معمارية رياضيات أولًا: نمذجة بيانات حتمية، ومسارات قرار قابلة للتحقق، وأدلة منظمة قبل إضافة طبقات التحسين.",
|
||||||
|
"principles_heading": "مبادئ الإطار",
|
||||||
|
"deterministic": "أسس حتمية. تُحسب قرارات السياسة والسلامة الأساسية من قواعد صريحة ومدخلات مُنَمْذَجة. المخرجات قابلة للاختبار وإعادة الإنتاج والتدقيق.",
|
||||||
|
"ownership": "ملكية تشغيلية. تُصمم عمليات النشر لتكون تحت تحكم العميل وعلى بنية يختارها العميل، مع حدود تعاقدية واضحة للحقوق والمسؤوليات.",
|
||||||
|
"layered": "معمارية طبقية. الطبقة البشرية تقدم واجهات بسيطة. الطبقة الرياضية تبني سياقًا منظمًا وتقيّمه. طبقة الذكاء تعزيز اختياري وليست اعتمادًا وحيدًا.",
|
||||||
|
"permanence": "الاستمرارية بالتصميم. تُهندَس الأنظمة لعمر خدمة طويل مع مسارات ترقية، وضوابط توافق، وانضباط واضح للاسترجاع.",
|
||||||
|
"constitutional": "حوكمة دستورية. تفرض الثوابت الميكانيكية حدود السلامة بشكل متسق عبر الأوضاع والمستخدمين والوحدات.",
|
||||||
|
"domains_heading": "مجالات البحث",
|
||||||
|
"domains": "تشمل الأبحاث الحالية التنسيق الحتمي، ورسوم البيانات المعزولة حسب مساحة العمل، وعقود الموصلات، وسلامة الأدلة، وحوكمة الوحدات، والمرونة التشغيلية طويلة الأمد.",
|
||||||
|
"licensing_heading": "نموذج الترخيص",
|
||||||
|
"licensing": "تعتمد Edut نموذج البناء والترخيص لأنظمة برمجية محكومة. صُمم الترخيص لحقوق تشغيل طويلة الأمد مع حدود واضحة للسياسة والدعم والنشر.",
|
||||||
|
"status_heading": "الحالة الحالية",
|
||||||
|
"status": "الإطار في مرحلة تنفيذ وتحقق نشطة. تُصدر تصنيفات مبكرة استعدادًا لإطلاق مرحلي وتهيئة نشر مضبوط.",
|
||||||
|
"note": "ملاحظة: هذه الصفحة بسيطة عن قصد. وهي تعكس فلسفة منتج ترى أن الحساب قد يكون معقدًا بينما تبقى الواجهات هادئة."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/de.json
Normal file
30
translations/de.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "de",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "Zeugnis · Zeuge · Beweis",
|
||||||
|
"descriptor": "Entwicklung und Lizenzierung deterministischer Governance-Systeme",
|
||||||
|
"acknowledged": "bestätigt",
|
||||||
|
"privacy": "Datenschutz",
|
||||||
|
"terms": "Bedingungen",
|
||||||
|
"skip_to_content": "Zum Inhalt springen",
|
||||||
|
"interaction_hint": "Klicken Sie irgendwo auf der Seite, um Ihre Zugriffsanfrage zu starten.",
|
||||||
|
"context": {
|
||||||
|
"heading": "Forschungszusammenfassung",
|
||||||
|
"intro": "Edut (Hebräisch: עֵדוּת — Zeugnis, Zeuge, Beweis) ist eine Forschungs- und Lizenzierungsorganisation für Systeme mit Fokus auf deterministische Governance-Infrastruktur für reale Abläufe.",
|
||||||
|
"thesis": "Die zentrale These ist einfach: Operative Abhängigkeit darf keine dauerhafte Abhängigkeit von externen Kontrollsystemen erzwingen. Infrastruktur muss auch bei eingeschränkter Konnektivität, veränderten Anbieterökonomien und langen Betriebszeiträumen nutzbar bleiben.",
|
||||||
|
"approach": "Edut verfolgt dafür eine Math-first-Architektur: deterministische Datenmodellierung, überprüfbare Entscheidungswege und strukturierte Evidenz, bevor Optimierungsebenen hinzukommen.",
|
||||||
|
"principles_heading": "Rahmenprinzipien",
|
||||||
|
"deterministic": "Deterministische Grundlagen. Zentrale Richtlinien- und Sicherheitsentscheidungen werden aus expliziten Regeln und typisierten Eingaben berechnet. Ergebnisse sind testbar, reproduzierbar und auditierbar.",
|
||||||
|
"ownership": "Operative Eigentümerschaft. Deployments sind für kundengesteuerten Betrieb auf kundengewählter Infrastruktur ausgelegt, mit klaren vertraglichen Grenzen für Rechte und Pflichten.",
|
||||||
|
"layered": "Schichtenarchitektur. Die menschliche Ebene bietet einfache Oberflächen. Die mathematische Ebene baut und bewertet strukturierten Kontext. Die Intelligenzebene ist optional und niemals die einzige Abhängigkeit.",
|
||||||
|
"permanence": "Beständigkeit durch Design. Systeme werden für lange Lebensdauer mit Upgrade-Pfaden, Kompatibilitätskontrollen und klarer Rollback-Disziplin entwickelt.",
|
||||||
|
"constitutional": "Konstitutionelle Governance. Mechanische Invarianten setzen Sicherheitsgrenzen konsistent über Modi, Nutzer und Module hinweg durch.",
|
||||||
|
"domains_heading": "Forschungsbereiche",
|
||||||
|
"domains": "Aktuelle Forschung umfasst deterministische Orchestrierung, workspace-isolierte Datengraphen, Connector-Verträge, Evidenzintegrität, Modul-Governance und langfristige operative Resilienz.",
|
||||||
|
"licensing_heading": "Lizenzmodell",
|
||||||
|
"licensing": "Edut nutzt ein Build-and-License-Modell für governte Softwaresysteme. Die Lizenzierung ist auf dauerhafte Laufzeitrechte mit klaren Richtlinien-, Support- und Deployment-Grenzen ausgelegt.",
|
||||||
|
"status_heading": "Aktueller Stand",
|
||||||
|
"status": "Das Framework befindet sich in aktiver Implementierung und Validierung. Frühe Designationen werden für gestufte Launch-Bereitschaft und kontrolliertes Deployment-Onboarding vergeben.",
|
||||||
|
"note": "Hinweis: Diese Seite ist bewusst minimal. Sie spiegelt eine Produktphilosophie wider, bei der die Berechnung komplex und die Oberfläche ruhig bleibt."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/en.json
Normal file
30
translations/en.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "testimony · witness · evidence",
|
||||||
|
"descriptor": "Development and licensing of deterministic governance systems",
|
||||||
|
"acknowledged": "acknowledged",
|
||||||
|
"privacy": "Privacy",
|
||||||
|
"terms": "Terms",
|
||||||
|
"skip_to_content": "Skip to content",
|
||||||
|
"interaction_hint": "Click anywhere on the page to begin your access request.",
|
||||||
|
"context": {
|
||||||
|
"heading": "Research Abstract",
|
||||||
|
"intro": "Edut (Hebrew: עֵדוּת — testimony, witness, evidence) is a systems research and licensing organization focused on deterministic governance infrastructure for real-world operations.",
|
||||||
|
"thesis": "The central thesis is simple: operational dependence should not require permanent dependence on outside control planes. Infrastructure should remain useful under constrained connectivity, changing vendor economics, and long operating horizons.",
|
||||||
|
"approach": "Edut addresses this through a math-first architecture: deterministic data modeling, verifiable decision paths, and structured evidence before optimization layers are introduced.",
|
||||||
|
"principles_heading": "Framework Principles",
|
||||||
|
"deterministic": "Deterministic Foundations. Core policy and safety decisions are computed from explicit rules and typed inputs. Outputs are testable, reproducible, and auditable.",
|
||||||
|
"ownership": "Operational Ownership. Deployments are designed for client-controlled operation on client-chosen infrastructure, with clear contractual boundaries around rights and responsibilities.",
|
||||||
|
"layered": "Layered Architecture. The human layer presents simple surfaces. The mathematical layer assembles and scores structured context. The intelligence layer is optional augmentation and never the sole dependency.",
|
||||||
|
"permanence": "Permanence by Design. Systems are engineered for long service life with upgrade paths, compatibility controls, and explicit rollback discipline.",
|
||||||
|
"constitutional": "Constitutional Governance. Mechanical invariants enforce safety boundaries consistently across modes, users, and modules.",
|
||||||
|
"domains_heading": "Research Domains",
|
||||||
|
"domains": "Current research spans deterministic orchestration, workspace-isolated data graphs, connector contracts, evidence integrity, module governance, and long-horizon operational resilience.",
|
||||||
|
"licensing_heading": "Licensing Model",
|
||||||
|
"licensing": "Edut uses a build-and-license model for governed software systems. Licensing is designed for durable runtime rights with explicit policy, support, and deployment boundaries.",
|
||||||
|
"status_heading": "Current Status",
|
||||||
|
"status": "The framework is in active implementation and validation. Early designations are being issued for staged launch readiness and controlled deployment onboarding.",
|
||||||
|
"note": "Note: This page is intentionally minimal. It reflects a product philosophy where computation is complex and interfaces remain quiet."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/es.json
Normal file
30
translations/es.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "es",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "testimonio · testigo · evidencia",
|
||||||
|
"descriptor": "Desarrollo y licenciamiento de sistemas de gobernanza determinista",
|
||||||
|
"acknowledged": "reconocido",
|
||||||
|
"privacy": "Privacidad",
|
||||||
|
"terms": "Términos",
|
||||||
|
"skip_to_content": "Saltar al contenido",
|
||||||
|
"interaction_hint": "Haz clic en cualquier parte de la página para iniciar tu solicitud de acceso.",
|
||||||
|
"context": {
|
||||||
|
"heading": "Resumen de Investigación",
|
||||||
|
"intro": "Edut (hebreo: עֵדוּת — testimonio, testigo, evidencia) es una organización de investigación y licenciamiento de sistemas enfocada en infraestructura de gobernanza determinista para operaciones reales.",
|
||||||
|
"thesis": "La tesis central es simple: la dependencia operativa no debe convertirse en dependencia permanente de planos de control externos. La infraestructura debe seguir siendo útil con conectividad limitada, cambios económicos de proveedores y horizontes operativos largos.",
|
||||||
|
"approach": "Edut aborda esto con una arquitectura de matemáticas primero: modelado de datos determinista, rutas de decisión verificables y evidencia estructurada antes de introducir capas de optimización.",
|
||||||
|
"principles_heading": "Principios del Marco",
|
||||||
|
"deterministic": "Fundamentos deterministas. Las decisiones centrales de política y seguridad se calculan con reglas explícitas y entradas tipadas. Las salidas son comprobables, reproducibles y auditables.",
|
||||||
|
"ownership": "Propiedad operativa. Los despliegues están diseñados para operación controlada por el cliente en infraestructura elegida por el cliente, con límites contractuales claros sobre derechos y responsabilidades.",
|
||||||
|
"layered": "Arquitectura por capas. La capa humana presenta superficies simples. La capa matemática ensambla y puntúa contexto estructurado. La capa de inteligencia es una mejora opcional y nunca la única dependencia.",
|
||||||
|
"permanence": "Permanencia por diseño. Los sistemas se diseñan para vida útil prolongada con rutas de actualización, controles de compatibilidad y disciplina explícita de reversión.",
|
||||||
|
"constitutional": "Gobernanza constitucional. Los invariantes mecánicos hacen cumplir límites de seguridad de forma consistente entre modos, usuarios y módulos.",
|
||||||
|
"domains_heading": "Dominios de Investigación",
|
||||||
|
"domains": "La investigación actual abarca orquestación determinista, grafos de datos aislados por espacio de trabajo, contratos de conectores, integridad de evidencia, gobernanza de módulos y resiliencia operativa de largo plazo.",
|
||||||
|
"licensing_heading": "Modelo de Licencia",
|
||||||
|
"licensing": "Edut utiliza un modelo de construcción y licenciamiento para sistemas de software gobernados. La licencia está diseñada para derechos de ejecución duraderos con límites explícitos de política, soporte y despliegue.",
|
||||||
|
"status_heading": "Estado Actual",
|
||||||
|
"status": "El marco se encuentra en implementación y validación activa. Se están emitiendo designaciones tempranas para preparación de lanzamiento por etapas e incorporación de despliegues controlados.",
|
||||||
|
"note": "Nota: Esta página es intencionalmente mínima. Refleja una filosofía de producto donde el cómputo es complejo y las interfaces permanecen silenciosas."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/fr.json
Normal file
30
translations/fr.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "fr",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "témoignage · témoin · preuve",
|
||||||
|
"descriptor": "Développement et licence de systèmes de gouvernance déterministes",
|
||||||
|
"acknowledged": "confirmé",
|
||||||
|
"privacy": "Confidentialité",
|
||||||
|
"terms": "Conditions",
|
||||||
|
"skip_to_content": "Aller au contenu",
|
||||||
|
"interaction_hint": "Cliquez n'importe où sur la page pour lancer votre demande d'accès.",
|
||||||
|
"context": {
|
||||||
|
"heading": "Résumé de Recherche",
|
||||||
|
"intro": "Edut (hébreu : עֵדוּת — témoignage, témoin, preuve) est une organisation de recherche et de licence de systèmes, centrée sur une infrastructure de gouvernance déterministe pour les opérations réelles.",
|
||||||
|
"thesis": "La thèse centrale est simple : la dépendance opérationnelle ne doit pas devenir une dépendance permanente à des plans de contrôle externes. L'infrastructure doit rester utile malgré une connectivité limitée, l'évolution économique des fournisseurs et des horizons d'exploitation longs.",
|
||||||
|
"approach": "Edut répond à cela avec une architecture math-first : modélisation déterministe des données, chemins de décision vérifiables et preuves structurées avant d'ajouter des couches d'optimisation.",
|
||||||
|
"principles_heading": "Principes du Cadre",
|
||||||
|
"deterministic": "Fondations déterministes. Les décisions clés de politique et de sécurité sont calculées à partir de règles explicites et d'entrées typées. Les sorties sont testables, reproductibles et auditables.",
|
||||||
|
"ownership": "Propriété opérationnelle. Les déploiements sont conçus pour une exploitation contrôlée par le client sur une infrastructure choisie par le client, avec des limites contractuelles claires sur les droits et responsabilités.",
|
||||||
|
"layered": "Architecture en couches. La couche humaine présente des surfaces simples. La couche mathématique assemble et évalue un contexte structuré. La couche d'intelligence est une amélioration optionnelle et jamais une dépendance unique.",
|
||||||
|
"permanence": "Pérennité par conception. Les systèmes sont conçus pour une longue durée de vie avec des chemins de mise à niveau, des contrôles de compatibilité et une discipline explicite de retour arrière.",
|
||||||
|
"constitutional": "Gouvernance constitutionnelle. Des invariants mécaniques appliquent les limites de sécurité de manière cohérente entre modes, utilisateurs et modules.",
|
||||||
|
"domains_heading": "Domaines de Recherche",
|
||||||
|
"domains": "La recherche actuelle couvre l'orchestration déterministe, les graphes de données isolés par espace de travail, les contrats de connecteurs, l'intégrité des preuves, la gouvernance des modules et la résilience opérationnelle long terme.",
|
||||||
|
"licensing_heading": "Modèle de Licence",
|
||||||
|
"licensing": "Edut applique un modèle de construction et de licence pour des systèmes logiciels gouvernés. La licence est conçue pour des droits d'exécution durables avec des frontières explicites de politique, de support et de déploiement.",
|
||||||
|
"status_heading": "État Actuel",
|
||||||
|
"status": "Le cadre est en phase active d'implémentation et de validation. Des désignations précoces sont émises pour la préparation du lancement par étapes et l'intégration de déploiements contrôlés.",
|
||||||
|
"note": "Note : Cette page est volontairement minimale. Elle reflète une philosophie produit où le calcul est complexe et les interfaces restent discrètes."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/he.json
Normal file
30
translations/he.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "he",
|
||||||
|
"dir": "rtl",
|
||||||
|
"definition": "עדות · עד · ראיה",
|
||||||
|
"descriptor": "פיתוח ורישוי של מערכות ממשל דטרמיניסטיות",
|
||||||
|
"acknowledged": "אושר",
|
||||||
|
"privacy": "פרטיות",
|
||||||
|
"terms": "תנאים",
|
||||||
|
"skip_to_content": "דלג לתוכן",
|
||||||
|
"interaction_hint": "לחץ בכל מקום בדף כדי להתחיל את בקשת הגישה שלך.",
|
||||||
|
"context": {
|
||||||
|
"heading": "תקציר מחקר",
|
||||||
|
"intro": "Edut (עברית: עֵדוּת — עדות, עד, ראיה) היא ארגון מחקר ורישוי מערכות, המתמקד בתשתית ממשל דטרמיניסטית לפעילות בעולם האמיתי.",
|
||||||
|
"thesis": "התזה המרכזית פשוטה: תלות תפעולית לא אמורה להפוך לתלות קבועה בשכבות בקרה חיצוניות. התשתית צריכה להישאר שימושית גם בתנאי קישוריות מוגבלת, שינויי כלכלת ספקים ואופקי תפעול ארוכים.",
|
||||||
|
"approach": "Edut מיישמת זאת באמצעות ארכיטקטורה של מתמטיקה תחילה: מידול נתונים דטרמיניסטי, מסלולי החלטה ניתנים לאימות וראיות מובנות לפני הוספת שכבות אופטימיזציה.",
|
||||||
|
"principles_heading": "עקרונות המסגרת",
|
||||||
|
"deterministic": "יסודות דטרמיניסטיים. החלטות ליבה של מדיניות ובטיחות מחושבות מכללים מפורשים וקלטים מטיפוסים מוגדרים. התוצרים ניתנים לבדיקה, לשחזור ולביקורת.",
|
||||||
|
"ownership": "בעלות תפעולית. פריסות מתוכננות להפעלה בשליטת הלקוח על תשתית שנבחרה על ידו, עם גבולות חוזיים ברורים של זכויות ואחריות.",
|
||||||
|
"layered": "ארכיטקטורה שכבתית. השכבה האנושית מציגה ממשקים פשוטים. השכבה המתמטית מרכיבה ומדרגת הקשר מובנה. שכבת האינטליגנציה היא שיפור אופציונלי ואינה תלות יחידה.",
|
||||||
|
"permanence": "עמידות בתכנון. מערכות מתוכננות לחיי שירות ארוכים עם מסלולי שדרוג, בקרות תאימות ומשמעת חזרה לאחור מוגדרת.",
|
||||||
|
"constitutional": "ממשל חוקתי. אינוריאנטים מכניים אוכפים גבולות בטיחות באופן עקבי בין מצבים, משתמשים ומודולים.",
|
||||||
|
"domains_heading": "תחומי מחקר",
|
||||||
|
"domains": "המחקר הנוכחי כולל אורקסטרציה דטרמיניסטית, גרפי נתונים מבודדים לפי סביבת עבודה, חוזי מחברים, שלמות ראיות, ממשל מודולים ועמידות תפעולית לטווח ארוך.",
|
||||||
|
"licensing_heading": "מודל רישוי",
|
||||||
|
"licensing": "Edut פועלת במודל Build-and-License עבור מערכות תוכנה נשלטות. הרישוי מתוכנן לזכויות הרצה עמידות עם גבולות מפורשים של מדיניות, תמיכה ופריסה.",
|
||||||
|
"status_heading": "סטטוס נוכחי",
|
||||||
|
"status": "המסגרת נמצאת בשלבי יישום ואימות פעילים. ייעודים מוקדמים מונפקים לצורך מוכנות השקה מדורגת והטמעה מבוקרת.",
|
||||||
|
"note": "הערה: דף זה מינימלי בכוונה. הוא משקף פילוסופיית מוצר שבה החישוב מורכב, אך הממשקים נשארים שקטים."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/hi.json
Normal file
30
translations/hi.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "hi",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "गवाही · साक्षी · प्रमाण",
|
||||||
|
"descriptor": "नियतात्मक शासन प्रणालियों का विकास और लाइसेंसिंग",
|
||||||
|
"acknowledged": "स्वीकृत",
|
||||||
|
"privacy": "गोपनीयता",
|
||||||
|
"terms": "शर्तें",
|
||||||
|
"skip_to_content": "सामग्री पर जाएँ",
|
||||||
|
"interaction_hint": "अपना एक्सेस अनुरोध शुरू करने के लिए पेज पर कहीं भी क्लिक करें।",
|
||||||
|
"context": {
|
||||||
|
"heading": "शोध सार",
|
||||||
|
"intro": "Edut (हिब्रू: עֵדוּת — गवाही, साक्षी, प्रमाण) एक सिस्टम रिसर्च और लाइसेंसिंग संगठन है, जो वास्तविक संचालन के लिए नियतात्मक शासन अवसंरचना पर केंद्रित है।",
|
||||||
|
"thesis": "मुख्य विचार सरल है: परिचालन निर्भरता का अर्थ बाहरी कंट्रोल-प्लेन पर स्थायी निर्भरता नहीं होना चाहिए। सीमित कनेक्टिविटी, बदलती विक्रेता अर्थव्यवस्था और लंबे संचालन क्षितिज में भी अवसंरचना उपयोगी रहनी चाहिए।",
|
||||||
|
"approach": "Edut इसे math-first आर्किटेक्चर से लागू करता है: ऑप्टिमाइज़ेशन लेयर जोड़ने से पहले नियतात्मक डेटा मॉडलिंग, सत्यापन योग्य निर्णय-पथ और संरचित साक्ष्य।",
|
||||||
|
"principles_heading": "फ्रेमवर्क सिद्धांत",
|
||||||
|
"deterministic": "नियतात्मक आधार। मुख्य नीति और सुरक्षा निर्णय स्पष्ट नियमों और टाइप्ड इनपुट से गणना किए जाते हैं। आउटपुट परीक्षण योग्य, पुनरुत्पादनीय और ऑडिट योग्य होते हैं।",
|
||||||
|
"ownership": "परिचालन स्वामित्व। परिनियोजन इस तरह डिज़ाइन किए जाते हैं कि ग्राहक-चयनित अवसंरचना पर ग्राहक-नियंत्रित संचालन हो सके, और अधिकार/जिम्मेदारियों की अनुबंधीय सीमाएँ स्पष्ट रहें।",
|
||||||
|
"layered": "स्तरीय वास्तुकला। मानव परत सरल इंटरफेस देती है। गणितीय परत संरचित संदर्भ को संयोजित और स्कोर करती है। बुद्धिमत्ता परत वैकल्पिक वृद्धि है, एकमात्र निर्भरता नहीं।",
|
||||||
|
"permanence": "डिज़ाइन द्वारा स्थायित्व। सिस्टम लंबी सेवा-आयु के लिए बनाए जाते हैं, जिनमें अपग्रेड पथ, संगतता नियंत्रण और स्पष्ट रोलबैक अनुशासन शामिल होता है।",
|
||||||
|
"constitutional": "संवैधानिक शासन। यांत्रिक इनवेरिएंट्स मोड, उपयोगकर्ता और मॉड्यूल के पार सुरक्षा सीमाओं को लगातार लागू करते हैं।",
|
||||||
|
"domains_heading": "शोध क्षेत्र",
|
||||||
|
"domains": "वर्तमान शोध में नियतात्मक ऑर्केस्ट्रेशन, वर्कस्पेस-आइसोलेटेड डेटा ग्राफ, कनेक्टर कॉन्ट्रैक्ट्स, साक्ष्य अखंडता, मॉड्यूल गवर्नेंस और दीर्घकालिक परिचालन लचीलापन शामिल हैं।",
|
||||||
|
"licensing_heading": "लाइसेंसिंग मॉडल",
|
||||||
|
"licensing": "Edut शासित सॉफ़्टवेयर सिस्टम के लिए build-and-license मॉडल अपनाता है। लाइसेंसिंग को टिकाऊ रनटाइम अधिकारों के लिए डिज़ाइन किया गया है, जिसमें नीति, समर्थन और परिनियोजन सीमाएँ स्पष्ट हों।",
|
||||||
|
"status_heading": "वर्तमान स्थिति",
|
||||||
|
"status": "फ्रेमवर्क सक्रिय कार्यान्वयन और सत्यापन चरण में है। चरणबद्ध लॉन्च तैयारी और नियंत्रित परिनियोजन ऑनबोर्डिंग के लिए प्रारंभिक नामांकन जारी किए जा रहे हैं।",
|
||||||
|
"note": "नोट: यह पृष्ठ जानबूझकर न्यूनतम रखा गया है। यह उस उत्पाद दर्शन को दर्शाता है जिसमें गणना जटिल हो सकती है, लेकिन इंटरफेस शांत रहते हैं।"
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/ja.json
Normal file
30
translations/ja.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "ja",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "証言 · 証人 · 証拠",
|
||||||
|
"descriptor": "決定論的ガバナンスシステムの開発とライセンス提供",
|
||||||
|
"acknowledged": "確認済み",
|
||||||
|
"privacy": "プライバシー",
|
||||||
|
"terms": "利用規約",
|
||||||
|
"skip_to_content": "本文へ移動",
|
||||||
|
"interaction_hint": "ページ上のどこかをクリックしてアクセス要求を開始してください。",
|
||||||
|
"context": {
|
||||||
|
"heading": "研究概要",
|
||||||
|
"intro": "Edut(ヘブライ語: עֵדוּת — 証言・証人・証拠)は、実運用向けの決定論的ガバナンス基盤に焦点を当てた、システム研究およびライセンス提供組織です。",
|
||||||
|
"thesis": "中心となる考え方は明確です。運用上の依存は、外部コントロールプレーンへの恒久的な依存を意味してはなりません。接続制約、ベンダー経済の変化、長期運用の下でも、基盤は有効であり続けるべきです。",
|
||||||
|
"approach": "EdutはこれをMath-firstアーキテクチャで実現します。決定論的データモデリング、検証可能な意思決定経路、構造化された証跡を先に整え、その後に最適化層を追加します。",
|
||||||
|
"principles_heading": "フレームワーク原則",
|
||||||
|
"deterministic": "決定論的基盤。中核となるポリシーと安全判断は、明示ルールと型付き入力から計算されます。出力はテスト可能で、再現可能で、監査可能です。",
|
||||||
|
"ownership": "運用上の所有権。導入は、顧客が選ぶインフラ上で顧客が運用を管理できるよう設計され、権利と責任の契約境界が明確です。",
|
||||||
|
"layered": "レイヤード構成。人間レイヤーはシンプルなUIを提供し、数学レイヤーは構造化コンテキストを組み立てて評価します。インテリジェンスレイヤーは任意の強化であり、唯一の依存先にはなりません。",
|
||||||
|
"permanence": "永続性を前提とした設計。システムは長期運用を想定し、アップグレード経路、互換性制御、明確なロールバック規律を備えます。",
|
||||||
|
"constitutional": "憲法的ガバナンス。機械的な不変条件が、モード・ユーザー・モジュールをまたいで安全境界を一貫して強制します。",
|
||||||
|
"domains_heading": "研究領域",
|
||||||
|
"domains": "現在の研究は、決定論的オーケストレーション、ワークスペース分離データグラフ、コネクタ契約、証跡整合性、モジュールガバナンス、長期的な運用レジリエンスに及びます。",
|
||||||
|
"licensing_heading": "ライセンスモデル",
|
||||||
|
"licensing": "Edutは、統治されたソフトウェアシステム向けにBuild-and-Licenseモデルを採用しています。ライセンスは、ポリシー・サポート・展開境界を明示した持続的な実行権を前提に設計されています。",
|
||||||
|
"status_heading": "現在の状況",
|
||||||
|
"status": "本フレームワークは、実装と検証のアクティブな段階にあります。段階的ローンチ準備と統制された導入オンボーディングに向けて、初期指定の発行を進めています。",
|
||||||
|
"note": "注記: このページは意図的にミニマルです。計算は複雑でも、インターフェースは静かであるべきという製品哲学を表しています。"
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/ko.json
Normal file
30
translations/ko.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "ko",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "증언 · 증인 · 증거",
|
||||||
|
"descriptor": "결정론적 거버넌스 시스템의 개발 및 라이선싱",
|
||||||
|
"acknowledged": "확인됨",
|
||||||
|
"privacy": "개인정보",
|
||||||
|
"terms": "약관",
|
||||||
|
"skip_to_content": "본문으로 건너뛰기",
|
||||||
|
"interaction_hint": "접근 요청을 시작하려면 페이지 아무 곳이나 클릭하세요.",
|
||||||
|
"context": {
|
||||||
|
"heading": "연구 요약",
|
||||||
|
"intro": "Edut(히브리어: עֵדוּת — 증언, 증인, 증거)는 실제 운영을 위한 결정론적 거버넌스 인프라에 집중하는 시스템 연구 및 라이선싱 조직입니다.",
|
||||||
|
"thesis": "핵심 논지는 단순합니다. 운영 의존성은 외부 제어 평면에 대한 영구 의존으로 이어져서는 안 됩니다. 제한된 연결성, 공급업체 경제 변화, 장기 운영 환경에서도 인프라는 유효해야 합니다.",
|
||||||
|
"approach": "Edut는 수학 우선(math-first) 아키텍처로 이를 해결합니다. 최적화 계층을 넣기 전에 결정론적 데이터 모델링, 검증 가능한 의사결정 경로, 구조화된 증거를 먼저 구축합니다.",
|
||||||
|
"principles_heading": "프레임워크 원칙",
|
||||||
|
"deterministic": "결정론적 기반. 핵심 정책 및 안전 결정은 명시적 규칙과 타입화된 입력으로 계산됩니다. 결과는 테스트 가능하고 재현 가능하며 감사 가능합니다.",
|
||||||
|
"ownership": "운영 소유권. 배포는 고객이 선택한 인프라에서 고객이 통제하여 운영하도록 설계되며, 권리와 책임의 계약 경계를 명확히 합니다.",
|
||||||
|
"layered": "계층형 아키텍처. 인간 계층은 단순한 표면을 제공하고, 수학 계층은 구조화된 맥락을 조합해 점수화합니다. 지능 계층은 선택적 강화이며 유일한 의존점이 아닙니다.",
|
||||||
|
"permanence": "지속성 중심 설계. 시스템은 긴 수명 주기를 목표로 업그레이드 경로, 호환성 제어, 명시적 롤백 규율을 갖추어 설계됩니다.",
|
||||||
|
"constitutional": "헌법형 거버넌스. 기계적 불변조건이 모드, 사용자, 모듈 전반에서 안전 경계를 일관되게 강제합니다.",
|
||||||
|
"domains_heading": "연구 분야",
|
||||||
|
"domains": "현재 연구는 결정론적 오케스트레이션, 워크스페이스 격리 데이터 그래프, 커넥터 계약, 증거 무결성, 모듈 거버넌스, 장기 운영 복원력을 포함합니다.",
|
||||||
|
"licensing_heading": "라이선싱 모델",
|
||||||
|
"licensing": "Edut는 통제형 소프트웨어 시스템에 build-and-license 모델을 적용합니다. 라이선싱은 정책, 지원, 배포 경계를 명시한 지속 가능한 런타임 권리를 목표로 설계됩니다.",
|
||||||
|
"status_heading": "현재 상태",
|
||||||
|
"status": "프레임워크는 활발한 구현 및 검증 단계에 있습니다. 단계적 출시 준비와 통제된 배포 온보딩을 위해 초기 지정이 발급되고 있습니다.",
|
||||||
|
"note": "참고: 이 페이지는 의도적으로 미니멀합니다. 연산은 복잡하더라도 인터페이스는 조용해야 한다는 제품 철학을 반영합니다."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/pt.json
Normal file
30
translations/pt.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "pt",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "testemunho · testemunha · evidência",
|
||||||
|
"descriptor": "Desenvolvimento e licenciamento de sistemas de governança determinística",
|
||||||
|
"acknowledged": "confirmado",
|
||||||
|
"privacy": "Privacidade",
|
||||||
|
"terms": "Termos",
|
||||||
|
"skip_to_content": "Ir para o conteúdo",
|
||||||
|
"interaction_hint": "Clique em qualquer lugar da página para iniciar sua solicitação de acesso.",
|
||||||
|
"context": {
|
||||||
|
"heading": "Resumo de Pesquisa",
|
||||||
|
"intro": "Edut (hebraico: עֵדוּת — testemunho, testemunha, evidência) é uma organização de pesquisa e licenciamento de sistemas focada em infraestrutura de governança determinística para operações reais.",
|
||||||
|
"thesis": "A tese central é simples: dependência operacional não deve exigir dependência permanente de planos de controle externos. A infraestrutura deve permanecer útil com conectividade restrita, mudanças econômicas de fornecedores e horizontes operacionais longos.",
|
||||||
|
"approach": "A Edut aborda isso por meio de uma arquitetura math-first: modelagem determinística de dados, trilhas de decisão verificáveis e evidência estruturada antes da introdução de camadas de otimização.",
|
||||||
|
"principles_heading": "Princípios do Framework",
|
||||||
|
"deterministic": "Fundamentos determinísticos. Decisões centrais de política e segurança são calculadas a partir de regras explícitas e entradas tipadas. As saídas são testáveis, reproduzíveis e auditáveis.",
|
||||||
|
"ownership": "Propriedade operacional. As implantações são projetadas para operação controlada pelo cliente em infraestrutura escolhida pelo cliente, com limites contratuais claros sobre direitos e responsabilidades.",
|
||||||
|
"layered": "Arquitetura em camadas. A camada humana apresenta superfícies simples. A camada matemática monta e pontua contexto estruturado. A camada de inteligência é um aprimoramento opcional e nunca a única dependência.",
|
||||||
|
"permanence": "Permanência por design. Os sistemas são projetados para longa vida útil com trilhas de atualização, controles de compatibilidade e disciplina explícita de rollback.",
|
||||||
|
"constitutional": "Governança constitucional. Invariantes mecânicos aplicam limites de segurança de forma consistente entre modos, usuários e módulos.",
|
||||||
|
"domains_heading": "Domínios de Pesquisa",
|
||||||
|
"domains": "A pesquisa atual abrange orquestração determinística, grafos de dados isolados por workspace, contratos de conectores, integridade de evidências, governança de módulos e resiliência operacional de longo prazo.",
|
||||||
|
"licensing_heading": "Modelo de Licenciamento",
|
||||||
|
"licensing": "A Edut utiliza um modelo de construir e licenciar para sistemas de software governados. O licenciamento é projetado para direitos de execução duráveis com limites explícitos de política, suporte e implantação.",
|
||||||
|
"status_heading": "Status Atual",
|
||||||
|
"status": "O framework está em implementação e validação ativa. Designações iniciais estão sendo emitidas para preparação de lançamento em fases e onboarding de implantação controlada.",
|
||||||
|
"note": "Nota: Esta página é intencionalmente minimalista. Ela reflete uma filosofia de produto em que a computação é complexa e as interfaces permanecem discretas."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/ru.json
Normal file
30
translations/ru.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "ru",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "свидетельство · свидетель · доказательство",
|
||||||
|
"descriptor": "Разработка и лицензирование детерминированных систем управления",
|
||||||
|
"acknowledged": "подтверждено",
|
||||||
|
"privacy": "Конфиденциальность",
|
||||||
|
"terms": "Условия",
|
||||||
|
"skip_to_content": "Перейти к содержанию",
|
||||||
|
"interaction_hint": "Нажмите в любом месте страницы, чтобы начать запрос доступа.",
|
||||||
|
"context": {
|
||||||
|
"heading": "Исследовательская аннотация",
|
||||||
|
"intro": "Edut (иврит: עֵדוּת — свидетельство, свидетель, доказательство) — исследовательская и лицензионная организация, сосредоточенная на детерминированной инфраструктуре управления для реальных операций.",
|
||||||
|
"thesis": "Ключевая идея проста: операционная зависимость не должна превращаться в постоянную зависимость от внешних контуров управления. Инфраструктура должна оставаться полезной при ограниченной связности, изменении экономики поставщиков и долгих горизонтах эксплуатации.",
|
||||||
|
"approach": "Edut решает эту задачу через архитектуру math-first: детерминированное моделирование данных, проверяемые траектории решений и структурированные доказательные данные до включения слоев оптимизации.",
|
||||||
|
"principles_heading": "Принципы фреймворка",
|
||||||
|
"deterministic": "Детерминированная основа. Ключевые решения по политике и безопасности вычисляются из явных правил и типизированных входных данных. Результаты проверяемы, воспроизводимы и аудируемы.",
|
||||||
|
"ownership": "Операционное владение. Развертывания проектируются для управляемой клиентом эксплуатации на выбранной клиентом инфраструктуре, с четкими договорными границами прав и ответственности.",
|
||||||
|
"layered": "Слоистая архитектура. Человеческий слой дает простые интерфейсы. Математический слой собирает и оценивает структурированный контекст. Интеллектуальный слой — опциональное усиление, но не единственная опора.",
|
||||||
|
"permanence": "Долговечность по проекту. Системы создаются для длительного срока службы с маршрутами обновления, контролем совместимости и явной дисциплиной отката.",
|
||||||
|
"constitutional": "Конституционное управление. Механические инварианты последовательно удерживают границы безопасности во всех режимах, для всех пользователей и модулей.",
|
||||||
|
"domains_heading": "Области исследований",
|
||||||
|
"domains": "Текущие исследования охватывают детерминированную оркестрацию, изолированные по рабочим пространствам графы данных, контракты коннекторов, целостность доказательств, управление модулями и долгосрочную операционную устойчивость.",
|
||||||
|
"licensing_heading": "Лицензионная модель",
|
||||||
|
"licensing": "Edut применяет модель build-and-license для управляемых программных систем. Лицензирование нацелено на устойчивые права исполнения с явными границами политики, поддержки и развертывания.",
|
||||||
|
"status_heading": "Текущий статус",
|
||||||
|
"status": "Фреймворк находится в активной стадии реализации и валидации. Выдаются ранние назначения для поэтапной готовности к запуску и контролируемого подключения развертываний.",
|
||||||
|
"note": "Примечание: эта страница намеренно минималистична. Она отражает философию продукта, где вычисления сложны, а интерфейсы остаются тихими."
|
||||||
|
}
|
||||||
|
}
|
||||||
30
translations/zh.json
Normal file
30
translations/zh.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"lang": "zh",
|
||||||
|
"dir": "ltr",
|
||||||
|
"definition": "证词 · 见证 · 证据",
|
||||||
|
"descriptor": "确定性治理系统的开发与许可",
|
||||||
|
"acknowledged": "已确认",
|
||||||
|
"privacy": "隐私",
|
||||||
|
"terms": "条款",
|
||||||
|
"skip_to_content": "跳转到内容",
|
||||||
|
"interaction_hint": "点击页面任意位置即可开始访问请求。",
|
||||||
|
"context": {
|
||||||
|
"heading": "研究摘要",
|
||||||
|
"intro": "Edut(希伯来语:עֵדוּת——证词、见证、证据)是一家系统研究与许可机构,专注于面向真实业务运营的确定性治理基础设施。",
|
||||||
|
"thesis": "核心观点很简单:运营依赖不应演变为对外部控制平面的永久依赖。即使在网络受限、供应商经济条件变化、以及长期运行场景下,基础设施也应持续可用。",
|
||||||
|
"approach": "Edut 以“数学优先”架构实现这一目标:先进行确定性数据建模、可验证决策路径与结构化证据,再引入优化层。",
|
||||||
|
"principles_heading": "框架原则",
|
||||||
|
"deterministic": "确定性基础。核心策略与安全决策基于显式规则和类型化输入计算得出,输出可测试、可复现、可审计。",
|
||||||
|
"ownership": "运营主权。系统部署面向客户可控运行与客户可选基础设施,并以明确合同边界界定权利与责任。",
|
||||||
|
"layered": "分层架构。人类层提供简洁界面;数学层组装并评分结构化上下文;智能层是可选增强,绝不是唯一依赖。",
|
||||||
|
"permanence": "长期性设计。系统按长期服役目标构建,具备升级路径、兼容性控制与明确回滚机制。",
|
||||||
|
"constitutional": "宪制化治理。机械不变量在不同模式、用户与模块间一致执行安全边界。",
|
||||||
|
"domains_heading": "研究领域",
|
||||||
|
"domains": "当前研究涵盖确定性编排、工作区隔离数据图、连接器契约、证据完整性、模块治理与长期运营韧性。",
|
||||||
|
"licensing_heading": "许可模型",
|
||||||
|
"licensing": "Edut 采用“构建并许可”的治理软件模型。许可设计强调长期运行权利,并明确策略、支持与部署边界。",
|
||||||
|
"status_heading": "当前状态",
|
||||||
|
"status": "该框架处于积极实施与验证阶段。早期资格正在发放,用于分阶段上线准备与受控部署接入。",
|
||||||
|
"note": "说明:本页面刻意保持极简,体现了“计算可以复杂,界面应保持安静”的产品哲学。"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user