"매우 잘 만들어진 거짓말은 종교의 경전과 같다." "A very well-crafted lie is like religious scripture."
AI 시대를 위한 상상의 이야기 아카이브 플랫폼. 생성형 AI로 만든 허구의 이야기들을 모아 공유하고, 그 그럴듯함과 창의성을 평가하는 한영 이중언어 웹 애플리케이션입니다.
- 📚 AI 스토리 아카이브: 카테고리별(신화, 과학, 역사, 종교, 사회) 이야기 탐색
- ✍️ 스토리 생성: 인증된 사용자가 새로운 이야기 작성
- ⭐ 3차원 평가 시스템: 그럴듯함, 창의성, 설득력 점수 평가
- 👤 Replit SSO 인증: Google, Apple, GitHub, X, Email/Password 로그인
- 🔒 Admin 시스템: 관리자 전용 콘텐츠 큐레이션 기능
- 🌓 다크/라이트 모드: 사용자 테마 설정
- 🌐 한영 이중언어: 완전한 다국어 지원
- React 18 + TypeScript
- Vite - 빌드 도구
- Wouter - 경량 라우팅
- TanStack Query - 서버 상태 관리
- shadcn/ui + Radix UI - UI 컴포넌트
- Tailwind CSS - 스타일링
- Express.js - REST API 서버
- Drizzle ORM - 타입 안전 데이터베이스 ORM
- Neon Database - PostgreSQL (서버리스)
- Passport.js - Replit OpenID Connect 인증
- Node.js 20.x 이상
- npm 또는 yarn
- PostgreSQL (또는 Neon Database 계정)
-
저장소 클론
git clone <repository-url> cd LieLabDreamClub
-
의존성 설치
npm install
-
환경 변수 설정
cp .env.example .env
.env파일을 열어 다음 항목을 설정:# 필수 항목 DATABASE_URL=postgresql://user:password@host:port/database SESSION_SECRET=your-session-secret-min-32-chars # Replit Auth (프로덕션 배포시 필요) REPL_ID=your-repl-id ISSUER_URL=https://replit.com/oidc
-
데이터베이스 스키마 동기화
npm run db:push
npm run dev브라우저에서 http://localhost:5000 접속
| 명령어 | 설명 |
|---|---|
npm run dev |
개발 서버 실행 (Vite + Express) |
npm run build |
프로덕션 빌드 |
npm run start |
프로덕션 서버 실행 |
npm run check |
TypeScript 타입 체크 |
npm run db:push |
데이터베이스 스키마 동기화 |
LieLabDreamClub/
├── client/ # React 프론트엔드
│ ├── src/
│ │ ├── components/ # UI 컴포넌트
│ │ │ ├── ui/ # shadcn/ui 기본 컴포넌트
│ │ │ ├── navigation.tsx
│ │ │ ├── footer.tsx
│ │ │ └── story-card.tsx
│ │ ├── pages/ # 페이지 컴포넌트
│ │ │ ├── home.tsx
│ │ │ ├── archive.tsx
│ │ │ ├── create-story.tsx
│ │ │ ├── story-detail.tsx
│ │ │ ├── stats.tsx
│ │ │ └── admin-explorer.tsx
│ │ ├── lib/ # 유틸리티 & Context
│ │ │ ├── theme-provider.tsx
│ │ │ ├── language-context.tsx
│ │ │ └── queryClient.ts
│ │ └── main.tsx
│ └── public/
├── server/ # Express 백엔드
│ ├── index.ts # 서버 엔트리포인트
│ ├── routes.ts # API 라우트
│ ├── storage.ts # 데이터 저장소 인터페이스
│ ├── replitAuth.ts # Replit SSO 인증
│ └── vite.ts # Vite 개발 미들웨어
├── shared/ # 공유 타입 & 스키마
│ └── schema.ts # Drizzle 스키마 + Zod 검증
├── design_guidelines.md # 디자인 가이드라인
├── replit.md # Replit 프로젝트 문서
└── package.json
GET /api/auth/user- 현재 사용자 정보 조회GET /api/login- Replit SSO 로그인GET /api/logout- 로그아웃
GET /api/stories- 모든 스토리 조회 (공개)GET /api/stories/:id- 단일 스토리 조회 (공개)POST /api/stories- 스토리 생성 (인증 필요)POST /api/stories/:id/rate- 스토리 평가 (인증 필요)
POST /api/dev/set-admin/:userId- Admin 권한 설정 (개발 환경만)
"Dark Academic Archive meets Sacred Text Library"
- 학술 아카이브의 권위와 경전의 신성함을 결합
- Crimson Pro (세리프) + Inter (산세리프) 타이포그래피
- 다크/라이트 테마로 깊이감 있는 독서 경험
- 한영 이중언어로 문화적 맥락 존중
자세한 내용은 design_guidelines.md 참조
{
id: string (UUID)
email: string | null
firstName: string | null
lastName: string | null
profileImageUrl: string | null
isAdmin: number (0=일반, 1=관리자)
createdAt: Date
updatedAt: Date
}{
id: string (UUID)
archiveNumber: number
title: string
content: string
category: 'mythology' | 'science' | 'history' | 'religion' | 'society'
imageUrl: string | null
userId: string | null
createdAt: Date
plausibilityScore: number // 그럴듯함 누적 점수
creativityScore: number // 창의성 누적 점수
persuasivenessScore: number // 설득력 누적 점수
totalRatings: number // 평가 횟수
}로컬 환경에서 Replit Auth 없이 개발하려면:
- 메모리 스토리지 사용:
DATABASE_URL없이 실행하면 자동으로 in-memory 저장소 사용 - Admin 권한 설정:
- 먼저 로그인 (또는 mock 사용자 생성)
POST /api/dev/set-admin/:userId엔드포인트로 본인을 admin으로 설정
- Replit에서 프로젝트 import
- PostgreSQL addon 추가
- Environment secrets 설정 (REPL_ID, SESSION_SECRET)
- Deploy 버튼 클릭
npm run build로 빌드dist/폴더 배포- 환경 변수 설정
npm run start로 서버 실행
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - 자세한 내용은 LICENSE 파일 참조
- replit.md - Replit 프로젝트 상세 정보
- design_guidelines.md - 디자인 가이드라인
- Drizzle ORM 문서
- shadcn/ui 문서
이 프로젝트는 Replit Agent를 통해 생성되었으며, AI 시대의 진실과 허구의 경계를 탐험하는 실험적 플랫폼입니다. 잘 만들어진 허구가 어떻게 문화적 경전이 될 수 있는지, 그리고 AI가 만든 이야기를 우리가 어떻게 평가하고 보존할 수 있는지를 질문합니다.
Made with ❤️ and 🤖 AI