Skip to content
36 changes: 18 additions & 18 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
},
"dependencies": {
"@globaltypesystem/gts-ts": "^0.4.0",
"lucide-react": "^0.554.0",
"react": "^19.2.3",
"react-dom": "^19.2.0",
"lucide-react": "^0.562.0",
"react": "19.2.3",
"react-dom": "19.2.3",
"react-icons": "^5.7.0",
"react-router-dom": "^7.9.6"
"react-router-dom": "^7.11.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
Expand Down
121 changes: 62 additions & 59 deletions pages/Landing.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -199,21 +199,21 @@ export const Landing: React.FC = () => {
data schemas and instances across teams, vendors, and runtimes.
</p>
<div className='space-x-4 animate-slideUp stagger-3'>
<Link
to='/docs/introduction'
<a
href='https://github.com/GlobalTypeSystem/gts-spec/blob/main/README.md'
target='_blank'
rel='noreferrer'
className='inline-flex items-center justify-center rounded-lg text-sm font-medium transition-all duration-300 h-11 px-8 bg-brand-600 text-white hover:bg-brand-700 hover:scale-105 hover:shadow-xl shadow-lg shadow-brand-500/20 animate-glow'
>
Read the Spec
<ArrowRight size={16} className='ml-2' />
</Link>
<a
href='https://github.com/GlobalTypeSystem'
target='_blank'
rel='noreferrer'
</a>
<Link
to='/docs/introduction'
className='inline-flex items-center justify-center rounded-lg text-sm font-medium transition-all duration-300 h-11 px-8 border border-slate-200 dark:border-slate-800 hover:bg-slate-100 dark:hover:bg-slate-900 hover:scale-105 text-slate-900 dark:text-slate-100'
>
View on GitHub
</a>
View the docs
</Link>
</div>
<p className='text-sm text-slate-500 dark:text-slate-400 italic mt-4 animate-fadeIn stagger-4'>
Built for CTOs, architects, and engineering leaders.<br />
Expand Down Expand Up @@ -336,18 +336,18 @@ export const Landing: React.FC = () => {
className='container space-y-6 py-8 md:py-12 lg:py-24 mx-auto px-4 border-t border-slate-100 dark:border-slate-900'
>
<h2 className='text-3xl font-bold text-center mb-12 text-slate-900 dark:text-white animate-slideUp'>
Why teams choose GTS
Why teams use GTS identifiers
</h2>
<div className='mx-auto grid justify-center gap-6 sm:grid-cols-2 max-w-6xl lg:grid-cols-3'>
{/* 1. Human-readable identifiers */}
{/* 1. Human-readable */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-brand-500/50 animate-scaleIn stagger-1'>
<div className='absolute inset-0 bg-gradient-to-br from-brand-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
<div className='relative z-10'>
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-brand-100 dark:bg-brand-900 text-brand-600 dark:text-brand-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<BookOpen size={20} />
</div>
<h3 className='font-bold text-slate-900 dark:text-white mb-2'>
Human-readable identifiers
Human-readable
</h3>
<p className='text-sm text-slate-600 dark:text-slate-400'>
Every identifier encodes vendor, package, namespace, type, and
Expand All @@ -357,37 +357,15 @@ export const Landing: React.FC = () => {
</div>
</div>

{/* 2. JSON Schema / YAML / TypeSpec compatible */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-sky-500/50 animate-scaleIn stagger-2'>
<div className='absolute inset-0 bg-gradient-to-br from-blue-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
<div className='relative z-10'>
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<ShieldCheck size={20} />
</div>
<h3 className='font-bold text-slate-900 dark:text-white mb-2'>
JSON Schema / YAML / TypeSpec compatible
</h3>
<p className='text-sm text-slate-600 dark:text-slate-400'>
GTS Type Schemas are standard JSON Schema documents with{' '}
<code className='text-blue-500 dark:text-blue-400'>
x-gts-*
</code>{' '}
extensions. Standard JSON Schema tooling can process the schema
body, while GTS-aware tooling enforces the additional registry
rules. YAML and TypeSpec sources may compile to the canonical form.
</p>
</div>
</div>

{/* 3. Versioned identifiers */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-purple-500/50 animate-scaleIn stagger-3'>
{/* 2. Versioned */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-purple-500/50 animate-scaleIn stagger-2'>
<div className='absolute inset-0 bg-gradient-to-br from-purple-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
<div className='relative z-10'>
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-purple-100 dark:bg-purple-900 text-purple-600 dark:text-purple-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<GitBranch size={20} />
</div>
<h3 className='font-bold text-slate-900 dark:text-white mb-2'>
Versioned identifiers
Versioned
</h3>
<p className='text-sm text-slate-600 dark:text-slate-400'>
Major and optional minor versions are part of the identifier.
Expand All @@ -398,15 +376,15 @@ export const Landing: React.FC = () => {
</div>
</div>

{/* 4. Cross-system unique identifiers */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-emerald-500/50 animate-scaleIn stagger-4'>
{/* 3. Cross-system unique */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-emerald-500/50 animate-scaleIn stagger-3'>
<div className='absolute inset-0 bg-gradient-to-br from-emerald-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
<div className='relative z-10'>
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-emerald-100 dark:bg-emerald-900 text-emerald-600 dark:text-emerald-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<Puzzle size={20} />
</div>
<h3 className='font-bold text-slate-900 dark:text-white mb-2'>
Cross-system unique identifiers
Cross-system unique
</h3>
<p className='text-sm text-slate-600 dark:text-slate-400'>
The vendor-qualified structure prevents naming collisions
Expand All @@ -416,41 +394,66 @@ export const Landing: React.FC = () => {
</div>
</div>

{/* 5. API data types extension */}
{/* 4. Enables granular access control */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-pink-500/50 animate-scaleIn stagger-4'>
<div className='absolute inset-0 bg-gradient-to-br from-pink-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
<div className='relative z-10'>
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-pink-100 dark:bg-pink-900 text-pink-600 dark:text-pink-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<Lock size={20} />
</div>
<h3 className='font-bold text-slate-900 dark:text-white mb-2'>
Enables granular access control
</h3>
<p className='text-sm text-slate-600 dark:text-slate-400'>
Build RBAC/ABAC policies with wildcard patterns like{' '}
<code className='text-pink-500 dark:text-pink-400'>
gts.vendor.pkg.*
</code>
. Authorize entire type families or filter by attribute
predicates — no explicit allowlists to maintain.
</p>
</div>
</div>

{/* 5. Enables API data types inheritance */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-orange-500/50 animate-scaleIn stagger-5'>
<div className='absolute inset-0 bg-gradient-to-br from-orange-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
<div className='relative z-10'>
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-orange-100 dark:bg-orange-900 text-orange-600 dark:text-orange-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<Database size={20} />
</div>
<h3 className='font-bold text-slate-900 dark:text-white mb-2'>
API data types extension
Enables API data types Inheritance
</h3>
<p className='text-sm text-slate-600 dark:text-slate-400'>
Derive compatible types from platform base schemas. Store base
fields in indexed columns and vendor extensions in JSON/JSONB
— no DDL migrations, full API compatibility preserved.
Derive vendor-specific types from platform base types while
preserving API compatibility, e.g. by defining some <code class="text-blue-500 dark:text-blue-400">data</code> or <code class="text-blue-500 dark:text-blue-400">payload</code> property schema. Store common fields in indexed
columns, extensions in JSON/JSONB — no DDL migrations needed,
full type safety maintained across the inheritance chain.
</p>
</div>
</div>

{/* 6. Granular access control */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-pink-500/50 animate-scaleIn stagger-6'>
<div className='absolute inset-0 bg-gradient-to-br from-pink-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
{/* 6. Provides types metadata convention */}
<div className='group relative overflow-hidden rounded-xl border border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-6 transition-all duration-300 hover:shadow-xl hover:scale-105 hover:border-sky-500/50 animate-scaleIn stagger-6'>
<div className='absolute inset-0 bg-gradient-to-br from-blue-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300'></div>
<div className='relative z-10'>
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-pink-100 dark:bg-pink-900 text-pink-600 dark:text-pink-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<Lock size={20} />
<div className='flex h-10 w-10 items-center justify-center rounded-lg bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-100 mb-4 group-hover:scale-110 transition-transform duration-300'>
<ShieldCheck size={20} />
</div>
<h3 className='font-bold text-slate-900 dark:text-white mb-2'>
Granular access control
Provides types metadata convention
</h3>
<p className='text-sm text-slate-600 dark:text-slate-400'>
Build RBAC/ABAC policies with wildcard patterns like{' '}
<code className='text-pink-500 dark:text-pink-400'>
gts.vendor.pkg.*
</code>
. Authorize entire type families or filter by attribute
predicates — no explicit allowlists to maintain.
A JSON Schema defines the shape of data but not how to
process it. GTS adds{' '}
<code className='text-blue-500 dark:text-blue-400'>
x-gts-traits
</code>{' '}
— type-level metadata such as retention policies, PII-masking
directives, indexing hints, and stream/topic associations.
Traits are inherited along the type chain, so platform-wide
defaults propagate automatically to every derived type.
</p>
</div>
</div>
Expand Down Expand Up @@ -901,10 +904,10 @@ export const Landing: React.FC = () => {
</div>
<div className='mt-8'>
<h4 className='text-lg font-bold text-slate-900 dark:text-white'>
See GTS Kit in action
See GTS VS Code plugin in action
</h4>
<p className='mt-1 text-sm text-slate-600 dark:text-slate-400'>
Select a screenshot to explore the extension in detail.
The GTS VS Code plugin discovers GTS schemas and instances in JSON, JSONC, and YAML files within a project, validates identifiers and references, and visualizes relationships between entities.
</p>
<div className='mt-4 grid grid-cols-2 gap-2 sm:grid-cols-5'>
{VSCODE_SCREENSHOTS.map((screenshot, index) => (
Expand Down
Loading