diff --git a/.replit b/.replit
index 310fc4d..535b600 100644
--- a/.replit
+++ b/.replit
@@ -14,6 +14,10 @@ run = ["npm", "run", "start"]
localPort = 5000
externalPort = 80
+[[ports]]
+localPort = 43349
+externalPort = 3000
+
[env]
PORT = "5000"
diff --git a/attached_assets/Ballspielverein Borussia 09 e.V. Dortmund (Borussia Dortmund) _1759157727399.png b/attached_assets/Ballspielverein Borussia 09 e.V. Dortmund (Borussia Dortmund) _1759157727399.png
new file mode 100644
index 0000000..b47423e
Binary files /dev/null and b/attached_assets/Ballspielverein Borussia 09 e.V. Dortmund (Borussia Dortmund) _1759157727399.png differ
diff --git a/attached_assets/Liverpool F.C. _1759157756392.png b/attached_assets/Liverpool F.C. _1759157756392.png
new file mode 100644
index 0000000..a05a026
Binary files /dev/null and b/attached_assets/Liverpool F.C. _1759157756392.png differ
diff --git a/attached_assets/Manchester City F.C. _1759157730506.png b/attached_assets/Manchester City F.C. _1759157730506.png
new file mode 100644
index 0000000..bc66159
Binary files /dev/null and b/attached_assets/Manchester City F.C. _1759157730506.png differ
diff --git a/attached_assets/inter milan_1759157779359.png b/attached_assets/inter milan_1759157779359.png
new file mode 100644
index 0000000..618ad99
Binary files /dev/null and b/attached_assets/inter milan_1759157779359.png differ
diff --git a/attached_assets/다운로드_1759157749955.png b/attached_assets/다운로드_1759157749955.png
new file mode 100644
index 0000000..618ad99
Binary files /dev/null and b/attached_assets/다운로드_1759157749955.png differ
diff --git a/client/src/App.tsx b/client/src/App.tsx
index d3745a4..ece7fc8 100644
--- a/client/src/App.tsx
+++ b/client/src/App.tsx
@@ -26,7 +26,7 @@ function Router() {
- {user?.role === 'admin' && (
+ {(user?.role === 'admin' || user?.role === 'superadmin') && (
)}
{user?.role === 'superadmin' && (
diff --git a/client/src/pages/Home.tsx b/client/src/pages/Home.tsx
index a4c003b..41797bd 100644
--- a/client/src/pages/Home.tsx
+++ b/client/src/pages/Home.tsx
@@ -1,5 +1,6 @@
import { useState } from "react";
import { useQuery } from "@tanstack/react-query";
+import { Link } from "wouter";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { useAuth } from "@/hooks/useAuth";
@@ -39,13 +40,13 @@ export default function Home() {
@@ -87,13 +88,15 @@ export default function Home() {
-
+
+
+
@@ -129,9 +132,11 @@ export default function Home() {
Active Media Outlet Auctions
-
+
+
+
{auctionsLoading ? (
diff --git a/replit.md b/replit.md
new file mode 100644
index 0000000..100f5fb
--- /dev/null
+++ b/replit.md
@@ -0,0 +1,69 @@
+# Overview
+
+SAPIENS is a comprehensive media platform that aggregates news and content from various media outlets organized into three categories: People, Topics, and Companies. The platform features a sophisticated auction system for media outlet management rights, prediction markets tied to articles, and a multi-tier admin system. Users can browse media outlets, read articles, participate in prediction markets, and bid on management rights through an eBay-style auction system.
+
+# User Preferences
+
+Preferred communication style: Simple, everyday language.
+
+# System Architecture
+
+## Frontend Architecture
+- **Framework**: React with TypeScript using Vite for build tooling
+- **Styling**: Tailwind CSS with shadcn/ui component library for consistent design
+- **Routing**: Wouter for client-side routing
+- **State Management**: TanStack Query for server state and data fetching
+- **Authentication**: Integrated with Replit Auth system
+
+## Backend Architecture
+- **Framework**: Express.js with TypeScript
+- **Database**: PostgreSQL with Drizzle ORM for type-safe database operations
+- **Authentication**: Replit-based OAuth with session management
+- **API Design**: RESTful API with structured error handling
+
+## Database Design
+The system uses a PostgreSQL database with the following core entities:
+- **Users**: Supports role-based access (user, admin, superadmin)
+- **Media Outlets**: Categorized entities (people, topics, companies) with slugs and metadata
+- **Articles**: Content with rich text, images, and association to media outlets
+- **Prediction Markets**: Betting markets linked to articles with yes/no pricing
+- **Auctions**: eBay-style bidding system for media outlet management rights
+- **Bids**: Individual auction bids with quality scoring
+- **Comments**: User-generated content on articles
+
+## Authentication & Authorization
+- **Multi-tier Access**: Three user roles with escalating permissions
+- **Session Management**: PostgreSQL-backed sessions with configurable TTL
+- **Route Protection**: Middleware-based authentication checks for protected routes
+
+## Key Features
+- **Category-based Navigation**: Tabbed interface for People, Topics, Companies
+- **Dual View Modes**: Grid and list views for article browsing
+- **Auction System**: Real-time bidding with quality score integration
+- **Prediction Markets**: Integration with external prediction market APIs
+- **Admin Dashboards**: Role-specific management interfaces
+- **Content Management**: Rich article creation and media outlet administration
+
+# External Dependencies
+
+## Database & Infrastructure
+- **Neon Database**: Serverless PostgreSQL hosting
+- **Drizzle ORM**: Type-safe database queries and migrations
+- **Replit Auth**: OAuth authentication provider
+
+## UI & Styling
+- **shadcn/ui**: Pre-built accessible UI components
+- **Radix UI**: Primitive components for complex interactions
+- **Tailwind CSS**: Utility-first CSS framework
+- **Lucide Icons**: Icon library for consistent iconography
+
+## Development Tools
+- **Vite**: Fast build tool with HMR for development
+- **TypeScript**: Type safety across the full stack
+- **TanStack Query**: Server state management and caching
+- **React Hook Form**: Form handling with validation
+
+## Third-party Integrations
+- **Kalshi API**: External prediction market data (referenced in user requirements)
+- **Image Services**: Unsplash for placeholder images and media content
+- **Session Storage**: connect-pg-simple for PostgreSQL session management
\ No newline at end of file
diff --git a/server/storage.ts b/server/storage.ts
index b2ef626..e0c4ecb 100644
--- a/server/storage.ts
+++ b/server/storage.ts
@@ -86,9 +86,11 @@ export class DatabaseStorage implements IStorage {
.insert(users)
.values(userData)
.onConflictDoUpdate({
- target: users.id,
+ target: users.email,
set: {
- ...userData,
+ firstName: userData.firstName,
+ lastName: userData.lastName,
+ profileImageUrl: userData.profileImageUrl,
updatedAt: new Date(),
},
})