Files
Sean Oliver 07fe32ace2 feat: implement inline expandable TableQuickstart for new homepage
- Created new inline TableQuickstart component with expandable card pattern
- Added feature flag support (control, ai, templates variants)
- Implemented smooth Framer Motion animations for expand/collapse
- Ported AI generation and template selection from legacy components
- Integrated with GettingStartedSection using PostHog feature flag
- Organized components into inline/ and legacy/ folders for clean separation
- Maintains all existing functionality while providing better UX

Key improvements:
- No navigation away from Getting Started section
- Progressive disclosure with smooth animations
- Supports A/B testing with feature flag variants
- Reuses existing API endpoints and logic
2025-09-19 10:15:11 -07:00

235 lines
9.5 KiB
TypeScript

import type { TableSuggestion } from './types'
export const SOCIAL_MEDIA_TABLES: TableSuggestion[] = [
{
tableName: 'user_profiles',
fields: [
{ name: 'id', type: 'uuid', nullable: false },
{ name: 'username', type: 'varchar', nullable: false, unique: true },
{ name: 'display_name', type: 'varchar', nullable: true },
{ name: 'bio', type: 'text', nullable: true },
{ name: 'avatar_url', type: 'text', nullable: true },
{ name: 'follower_count', type: 'int4', nullable: false, default: '0' },
{ name: 'following_count', type: 'int4', nullable: false, default: '0' },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Core user identity and profile information for your social platform',
source: 'template',
},
{
tableName: 'posts',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{
name: 'user_id',
type: 'uuid',
nullable: false,
description: 'References user_profiles.id',
},
{ name: 'content', type: 'text', nullable: false },
{ name: 'media_urls', type: 'jsonb', nullable: true },
{ name: 'like_count', type: 'int4', nullable: false, default: '0' },
{ name: 'comment_count', type: 'int4', nullable: false, default: '0' },
{ name: 'share_count', type: 'int4', nullable: false, default: '0' },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
{ name: 'updated_at', type: 'timestamptz', nullable: true },
],
rationale: 'Main content that users create and share on the platform',
source: 'template',
},
{
tableName: 'user_follows',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{
name: 'follower_id',
type: 'uuid',
nullable: false,
description: 'References user_profiles.id',
},
{
name: 'following_id',
type: 'uuid',
nullable: false,
description: 'References user_profiles.id',
},
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
{ name: 'notification_enabled', type: 'bool', nullable: false, default: 'true' },
],
rationale: 'Tracks relationships between users for the follow system',
source: 'template',
},
]
export const ECOMMERCE_TABLES: TableSuggestion[] = [
{
tableName: 'products',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'name', type: 'varchar', nullable: false },
{ name: 'description', type: 'text', nullable: true },
{ name: 'price', type: 'numeric', nullable: false },
{ name: 'stock_quantity', type: 'int4', nullable: false, default: '0' },
{ name: 'category', type: 'varchar', nullable: true },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Product catalog for your e-commerce store',
source: 'template',
},
{
tableName: 'orders',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'customer_id', type: 'uuid', nullable: false },
{ name: 'total_amount', type: 'numeric', nullable: false },
{ name: 'status', type: 'varchar', nullable: false, default: "'pending'" },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Customer orders and transactions',
source: 'template',
},
{
tableName: 'order_items',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'order_id', type: 'uuid', nullable: false, description: 'References orders.id' },
{ name: 'product_id', type: 'uuid', nullable: false, description: 'References products.id' },
{ name: 'quantity', type: 'int4', nullable: false },
{ name: 'unit_price', type: 'numeric', nullable: false },
{ name: 'subtotal', type: 'numeric', nullable: false },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Individual items within each order',
source: 'template',
},
]
export const BLOG_TABLES: TableSuggestion[] = [
{
tableName: 'articles',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'title', type: 'varchar', nullable: false },
{ name: 'slug', type: 'varchar', nullable: false, unique: true },
{ name: 'content', type: 'text', nullable: false },
{ name: 'author_id', type: 'uuid', nullable: false },
{ name: 'published', type: 'bool', nullable: false, default: 'false' },
{ name: 'published_at', type: 'timestamptz', nullable: true },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Blog posts and articles',
source: 'template',
},
{
tableName: 'categories',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'name', type: 'varchar', nullable: false, unique: true },
{ name: 'slug', type: 'varchar', nullable: false, unique: true },
{ name: 'description', type: 'text', nullable: true },
],
rationale: 'Article categories for organization',
source: 'template',
},
{
tableName: 'comments',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'article_id', type: 'uuid', nullable: false, description: 'References articles.id' },
{ name: 'author_name', type: 'varchar', nullable: false },
{ name: 'author_email', type: 'varchar', nullable: false },
{ name: 'content', type: 'text', nullable: false },
{ name: 'approved', type: 'bool', nullable: false, default: 'false' },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Reader comments on blog articles',
source: 'template',
},
]
export const PROJECT_MGMT_TABLES: TableSuggestion[] = [
{
tableName: 'projects',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'name', type: 'varchar', nullable: false },
{ name: 'description', type: 'text', nullable: true },
{ name: 'status', type: 'varchar', nullable: false, default: "'active'" },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Projects and their metadata',
source: 'template',
},
{
tableName: 'tasks',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'project_id', type: 'uuid', nullable: false },
{ name: 'title', type: 'varchar', nullable: false },
{ name: 'description', type: 'text', nullable: true },
{ name: 'assignee_id', type: 'uuid', nullable: true },
{ name: 'status', type: 'varchar', nullable: false, default: "'todo'" },
{ name: 'due_date', type: 'date', nullable: true },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Tasks within projects',
source: 'template',
},
{
tableName: 'team_members',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'project_id', type: 'uuid', nullable: false, description: 'References projects.id' },
{ name: 'user_id', type: 'uuid', nullable: false, description: 'References auth.users.id' },
{ name: 'role', type: 'varchar', nullable: false, default: "'member'" },
{ name: 'permissions', type: 'jsonb', nullable: true },
{ name: 'joined_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Team members assigned to projects',
source: 'template',
},
]
export const ANALYTICS_TABLES: TableSuggestion[] = [
{
tableName: 'events',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'event_name', type: 'varchar', nullable: false },
{ name: 'user_id', type: 'uuid', nullable: true },
{ name: 'session_id', type: 'varchar', nullable: true },
{ name: 'properties', type: 'jsonb', nullable: true },
{ name: 'created_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Event tracking for analytics',
source: 'template',
},
{
tableName: 'metrics',
fields: [
{ name: 'id', type: 'uuid', nullable: false, default: 'gen_random_uuid()' },
{ name: 'metric_name', type: 'varchar', nullable: false },
{ name: 'value', type: 'numeric', nullable: false },
{ name: 'dimensions', type: 'jsonb', nullable: true },
{ name: 'recorded_at', type: 'timestamptz', nullable: false, default: 'now()' },
],
rationale: 'Aggregated metrics and KPIs',
source: 'template',
},
{
tableName: 'sessions',
fields: [
{ name: 'id', type: 'varchar', nullable: false },
{ name: 'user_id', type: 'uuid', nullable: true },
{ name: 'device_info', type: 'jsonb', nullable: true },
{ name: 'ip_address', type: 'varchar', nullable: true },
{ name: 'user_agent', type: 'text', nullable: true },
{ name: 'started_at', type: 'timestamptz', nullable: false, default: 'now()' },
{ name: 'ended_at', type: 'timestamptz', nullable: true },
{ name: 'page_views', type: 'int4', nullable: false, default: '0' },
],
rationale: 'User sessions for tracking engagement',
source: 'template',
},
]