feat: Initialize project with Vite, React, and TypeScript

Sets up the foundational structure for the Obsidian | RP Plattform. This includes configuring Vite as the build tool, integrating React for the UI, and establishing TypeScript for type safety. Also includes initial styling and placeholder data to define the application's core interfaces.
This commit is contained in:
Lars Behrends
2025-12-28 02:15:09 +01:00
parent 4ab4a1d64a
commit d1b797a320
23 changed files with 2514 additions and 8 deletions

77
types.ts Normal file
View File

@@ -0,0 +1,77 @@
export interface Item {
id: string;
name: string;
count: number;
type: 'tool' | 'block' | 'consumable' | 'misc';
rarity?: 'common' | 'uncommon' | 'rare' | 'epic';
nbtSummary?: string;
}
export interface PlayerStats {
playtimeHours: number;
level: number;
role: string;
organizationId?: string;
}
export interface Player {
uuid: string;
username: string;
skinUrl?: string; // Placeholder in a real app
inventory: (Item | null)[];
stats: PlayerStats;
storyMarkdown: string;
tags: string[];
isOnline: boolean;
}
export interface CityStats {
taxRate: number;
biome: string;
defenseRating: number; // 0-10
government: string;
specialty: string;
}
export interface Organization {
id: string;
name: string;
type: 'City' | 'Guild' | 'Company';
description: string;
memberCount: number;
status: 'active' | 'archived';
bannerUrl?: string;
gallery?: string[];
establishedYear?: string;
mayor?: string;
cityStats?: CityStats;
}
export interface ShopItem {
id: string;
name: string;
description?: string;
price: number;
currency: 'Gold' | 'Credits' | 'Barter' | 'Diamonds';
stock: number;
type: 'item' | 'service' | 'blueprint';
imageUrl?: string;
materialsRequired?: string; // e.g. "Customer provides Stone"
}
export interface Project {
id: string;
title: string;
description: string;
category: 'Enterprise' | 'Service' | 'Story Arc' | 'Faction' | 'Black Market';
status: 'active' | 'recruiting' | 'private' | 'completed';
progress: number; // For story arcs completion or company reputation
owner: string;
employees: string[];
hiring: boolean;
foundedDate?: string;
associatedOrgId?: string; // Links this project to a city or guild
shopCatalog?: ShopItem[];
gallery?: string[];
bannerUrl?: string;
}