initial
This commit is contained in:
182
src/pages/docs/QuickStart.tsx
Normal file
182
src/pages/docs/QuickStart.tsx
Normal file
@@ -0,0 +1,182 @@
|
||||
import React from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { ArrowRight, ArrowLeft, ExternalLink } from 'lucide-react';
|
||||
|
||||
const CodeBlock = ({ children, title }: { children: string; title?: string }) => (
|
||||
<div className="rounded-lg border border-border overflow-hidden">
|
||||
{title && (
|
||||
<div className="px-4 py-2 bg-muted/50 border-b border-border text-xs font-medium text-muted-foreground">
|
||||
{title}
|
||||
</div>
|
||||
)}
|
||||
<pre className="p-4 overflow-x-auto bg-muted/30">
|
||||
<code className="text-sm font-mono text-foreground">{children}</code>
|
||||
</pre>
|
||||
</div>
|
||||
);
|
||||
|
||||
const QuickStart = () => {
|
||||
return (
|
||||
<div className="space-y-8">
|
||||
{/* Header */}
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-foreground">
|
||||
Quick Start
|
||||
</h1>
|
||||
<p className="text-xl text-muted-foreground leading-relaxed">
|
||||
Get started with idp.global in under 5 minutes. Choose between using our
|
||||
free hosted platform or self-hosting with Docker.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Option 1: Hosted Platform */}
|
||||
<div className="space-y-4">
|
||||
<h2 className="text-2xl font-semibold text-foreground">Option 1: Use Free Hosted Platform</h2>
|
||||
<p className="text-muted-foreground">
|
||||
The fastest way to get started. Create your free account on idp.global and start using
|
||||
it immediately. No installation required.
|
||||
</p>
|
||||
<div className="space-y-3">
|
||||
<div className="flex items-start gap-3">
|
||||
<span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-primary-foreground text-xs font-bold shrink-0">1</span>
|
||||
<div>
|
||||
<p className="font-medium text-foreground">Create your account</p>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Visit <a href="https://idp.global" className="text-primary hover:underline">idp.global</a> and sign up for a free account.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start gap-3">
|
||||
<span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-primary-foreground text-xs font-bold shrink-0">2</span>
|
||||
<div>
|
||||
<p className="font-medium text-foreground">Create an organization</p>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Set up your first organization and invite team members.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start gap-3">
|
||||
<span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-primary-foreground text-xs font-bold shrink-0">3</span>
|
||||
<div>
|
||||
<p className="font-medium text-foreground">Register your application</p>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Create an OAuth/OIDC client for your app and get your credentials.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Button asChild>
|
||||
<a href="https://idp.global">
|
||||
Get Started Free
|
||||
<ExternalLink className="ml-2 h-4 w-4" />
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* Option 2: Self-Host */}
|
||||
<div className="space-y-4">
|
||||
<h2 className="text-2xl font-semibold text-foreground">Option 2: Self-Host with Docker</h2>
|
||||
<p className="text-muted-foreground">
|
||||
Deploy your own instance for complete control over your data and infrastructure.
|
||||
</p>
|
||||
|
||||
<h3 className="text-lg font-medium text-foreground">Prerequisites</h3>
|
||||
<ul className="list-disc list-inside text-muted-foreground space-y-1 ml-2">
|
||||
<li>Docker installed on your server</li>
|
||||
<li>MongoDB instance (local or cloud)</li>
|
||||
<li>A domain name pointing to your server</li>
|
||||
</ul>
|
||||
|
||||
<h3 className="text-lg font-medium text-foreground">1. Pull the Docker image</h3>
|
||||
<CodeBlock title="Terminal">
|
||||
{`docker pull code.foss.global/idp.global/idp.global`}
|
||||
</CodeBlock>
|
||||
|
||||
<h3 className="text-lg font-medium text-foreground">2. Run the container</h3>
|
||||
<CodeBlock title="Terminal">
|
||||
{`docker run -d \\
|
||||
-p 2999:2999 \\
|
||||
-e MONGODB_URL=mongodb://your-mongo:27017/idp \\
|
||||
-e IDP_BASEURL=https://your-domain.com \\
|
||||
-e INSTANCE_NAME=my-idp \\
|
||||
code.foss.global/idp.global/idp.global`}
|
||||
</CodeBlock>
|
||||
|
||||
<h3 className="text-lg font-medium text-foreground">3. Access your instance</h3>
|
||||
<p className="text-muted-foreground">
|
||||
Your idp.global instance is now running on port 2999. Configure your reverse proxy
|
||||
(nginx, traefik, etc.) to handle HTTPS and route traffic to the container.
|
||||
</p>
|
||||
|
||||
<Button variant="outline" asChild>
|
||||
<Link to="/docs/docker">
|
||||
Full Docker Guide
|
||||
<ArrowRight className="ml-2 h-4 w-4" />
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* Integrate with your app */}
|
||||
<div className="space-y-4">
|
||||
<h2 className="text-2xl font-semibold text-foreground">Integrate with Your Application</h2>
|
||||
<p className="text-muted-foreground">
|
||||
Once you have access to an idp.global instance, install the TypeScript client:
|
||||
</p>
|
||||
|
||||
<CodeBlock title="Terminal">
|
||||
{`npm install @idp.global/idpclient`}
|
||||
</CodeBlock>
|
||||
|
||||
<h3 className="text-lg font-medium text-foreground">Basic Usage</h3>
|
||||
<CodeBlock title="app.ts">
|
||||
{`import { IdpClient } from '@idp.global/idpclient';
|
||||
|
||||
// Initialize the client
|
||||
const idpClient = new IdpClient('https://idp.global');
|
||||
|
||||
// Enable WebSocket connection for real-time updates
|
||||
await idpClient.enableTypedSocket();
|
||||
|
||||
// Check if user is logged in
|
||||
const isLoggedIn = await idpClient.determineLoginStatus();
|
||||
|
||||
if (isLoggedIn) {
|
||||
// Get current user info
|
||||
const userInfo = await idpClient.whoIs();
|
||||
console.log('User:', userInfo.user);
|
||||
|
||||
// Get user's organizations
|
||||
const orgs = await idpClient.getRolesAndOrganizations();
|
||||
console.log('Organizations:', orgs.organizations);
|
||||
}`}
|
||||
</CodeBlock>
|
||||
|
||||
<Button variant="outline" asChild>
|
||||
<Link to="/docs/sdk">
|
||||
Full SDK Documentation
|
||||
<ArrowRight className="ml-2 h-4 w-4" />
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* Navigation */}
|
||||
<div className="flex justify-between pt-8 border-t border-border">
|
||||
<Button variant="ghost" asChild>
|
||||
<Link to="/docs">
|
||||
<ArrowLeft className="mr-2 h-4 w-4" />
|
||||
Introduction
|
||||
</Link>
|
||||
</Button>
|
||||
<Button variant="ghost" asChild>
|
||||
<Link to="/docs/docker">
|
||||
Docker Deployment
|
||||
<ArrowRight className="ml-2 h-4 w-4" />
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default QuickStart;
|
||||
Reference in New Issue
Block a user