Skip to content

Commit 403ddd5

Browse files
committed
feat: add activities gallery and history page
1 parent 8025998 commit 403ddd5

File tree

12 files changed

+698
-34
lines changed

12 files changed

+698
-34
lines changed

โ€Žplatform/PLATFORM.mdโ€Ž

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,43 +24,45 @@ npm run build
2424
๋ฐฉ๋ฌธ์ž ์ถ”์  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ์ „์ฒด ํ”Œ๋žซํผ ๋ฐฐํฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. **(๊ถŒ์žฅ)**
2525

2626
### 3. Environment Setup
27-
`platform` ๋””๋ ‰ํ† ๋ฆฌ ๋ฃจํŠธ์— `.env` ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
27+
`platform` ๋””๋ ‰ํ† ๋ฆฌ ๋ฃจํŠธ์— `.env` ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
28+
> [!WARNING]
29+
> `.env` ํŒŒ์ผ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ์ •๋ณด ๋“ฑ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ์ ˆ๋Œ€ Git ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜์ง€ ๋งˆ์„ธ์š”. (์ด๋ฏธ `.gitignore`์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.)
30+
2831
```bash
2932
# .env ํŒŒ์ผ ์˜ˆ์‹œ
30-
APP_HOST=intro.pseudolab-devfactory.com
33+
APP_HOST=your-domain.com
3134

3235
# Database
33-
DATABASE_URL=postgresql://user:pass@devfactory-postgres:5432/dbname
36+
# ํ˜•์‹: postgresql://[user]:[password]@[host]:[port]/[dbname]
37+
DATABASE_URL=postgresql://user:pass@localhost:5432/dbname
3438
```
3539

36-
### 3. Traefik ๊ธฐ๋ฐ˜ ๋ฐฐํฌ
37-
Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
40+
### 4. Local Development
41+
๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ ์‹œ ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ํ™•์ธ(Hot-Reloading)ํ•˜๋ ค๋ฉด `docker-compose.dev.yml` ์˜ค๋ฒ„๋ผ์ด๋“œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
42+
43+
```bash
44+
cd platform
45+
# ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์‹คํ–‰ (์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ • ์‹œ ์ฆ‰์‹œ ๋ฐ˜์˜)
46+
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
47+
```
48+
49+
### 5. Traefik ๊ธฐ๋ฐ˜ ๋ฐฐํฌ (Production)
50+
์šด์˜ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
3851
```bash
3952
cd platform
4053
# ์ „์ฒด ์„œ๋น„์Šค ๋นŒ๋“œ ๋ฐ ์‹คํ–‰
41-
docker-compose up -d --build
54+
docker compose up -d --build
4255
```
4356

4457
#### ๋ฐฐํฌ ํ™•์ธ
4558
- **Frontend (Web)**: `https://<APP_HOST>`
4659
- **Backend (API)**: `https://<APP_HOST>/api/health`
4760

48-
### 4. Database Schema
49-
์‚ฌ์šฉ ์ค‘์ธ `logging.access_log` ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
50-
```sql
51-
CREATE TABLE logging.access_log (
52-
id SERIAL PRIMARY KEY,
53-
ts TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
54-
path TEXT NOT NULL,
55-
method TEXT NOT NULL,
56-
status INTEGER NOT NULL,
57-
latency_ms INTEGER,
58-
ip_hash TEXT,
59-
user_agent TEXT,
60-
referrer TEXT
61-
);
62-
```
61+
### 6. Security & Logging
62+
- **Logging**: ๋ณธ ํ”Œ๋žซํผ์€ ๋ฐฉ๋ฌธ์ž ์ถ”์ ์„ ์œ„ํ•ด `logging.access_log` ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ธ ์Šคํ‚ค๋งˆ๋Š” ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
63+
- **API Security**: `/api/stats` ๊ด€๋ จ ์—”๋“œํฌ์ธํŠธ๋Š” ๋ฐ์ดํ„ฐ ์ ์žฌ ๋ฐ ์กฐํšŒ๋ฅผ ์œ„ํ•ด ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š” ์‹œ ํŠน์ • ๋„๋ฉ”์ธ(CORS) ์ œํ•œ์ด๋‚˜ Rate Limiting์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
64+
- **Credential Management**: ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ •๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  `.env` ๊ด€๋ฆฌ์— ์œ ์˜ํ•˜์„ธ์š”.
6365

64-
### 5. Verification
66+
### 7. Verification
6567
- Traefik ๋Œ€์‹œ๋ณด๋“œ์—์„œ `df-platform` ๊ด€๋ จ ๋ผ์šฐํ„ฐ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
6668
- ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์ดํŠธ ์ ‘์† ์‹œ HTTPS ์ƒ์‹œ ์—ฐ๊ฒฐ ๋ฐ ๋ฐฉ๋ฌธ ๊ธฐ๋ก ์ ์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
<!DOCTYPE html>
2+
<html lang="ko">
3+
4+
<head>
5+
<meta charset="UTF-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<title>DevFactory | Our Journey</title>
8+
<link rel="icon" type="image/png" href="/favicon.png">
9+
<link rel="stylesheet" href="/style.css">
10+
</head>
11+
12+
<body>
13+
<header class="brand-header">
14+
<div class="header-content">
15+
<a href="/" class="logo-container">
16+
<img src="/brand_logo.png" alt="Pseudo-Lab DevFactory" class="brand-logo standard-logo">
17+
<span class="team-label">DevFactory</span>
18+
</a>
19+
<nav class="header-nav">
20+
<a href="/" class="nav-link">Home</a>
21+
</nav>
22+
</div>
23+
</header>
24+
25+
<div class="bg-grid"></div>
26+
<div class="bg-glow"></div>
27+
28+
<div class="history-container">
29+
<div class="history-intro">
30+
<div class="role-tag" style="margin-bottom: 1rem;">OUR JOURNEY</div>
31+
<h1 class="history-title">History of<br>DevFactory</h1>
32+
<p style="color: var(--text-dim); max-width: 600px; margin: 0 auto; line-height: 1.8;">
33+
๊ฐ€์งœ์—ฐ๊ตฌ์†Œ์˜ ๊ธฐ์ˆ ์  ๋„์ „์„ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ์ธ ์—”์ง€๋‹ˆ์–ด๋“ค์˜ ์—ฌ์ •์ž…๋‹ˆ๋‹ค.<br>
34+
์ž‘์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋นŒ๋”ฉ์—์„œ ์‹œ์ž‘ํ•ด, ์ด์ œ๋Š” DevFactory๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ<br>
35+
๋” ํฐ ๊ธฐ์ˆ ์  ๊ฐ€์น˜๋ฅผ ์„ธ์ƒ๊ณผ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
36+
</p>
37+
</div>
38+
39+
<div class="timeline">
40+
<!-- 2026 (Present) -->
41+
<div class="timeline-item">
42+
<div class="timeline-year">2026 (Present)</div>
43+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
44+
<h3>Preparing for Next Step</h3>
45+
<p>๋‹ค์–‘ํ•œ ํ–‰์‚ฌ์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ '๋น™๊ณ  ์„œ๋น„์Šค์˜ ํ”Œ๋žซํผํ™”' ๊ฐœ๋ฐœ์— ์ฃผ๋ ฅ ์ค‘ (์ฃผ์ตœ์ž๊ฐ€ ์ง์ ‘ ์ด๋ฒคํŠธ๋ฅผ ๊ฐœ์„คํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ๋ฒ”์šฉ ์‹œ์Šคํ…œ ๊ตฌ์ถ•). ์ˆ˜๋ฃŒ์ฆ ๋ฐœ๊ธ‰ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์  ์šด์˜
46+
์ง€์†.</p>
47+
</div>
48+
<div class="timeline-content">
49+
<div class="timeline-date">2026 / 01</div>
50+
<h3>2nd Grand Gathering</h3>
51+
<p>๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ(์นœํ•ด์ง€๊ธธ๋ฐ”๋ผ) ์šด์˜ ๋ฐ ๊ฐ€์งœ์—ฐ๊ตฌ์†Œ ์ˆ˜๋ฃŒ์ฆ ๋ฐœ๊ธ‰ ์„œ๋น„์Šค ์˜คํ”ˆ.</p>
52+
</div>
53+
</div>
54+
55+
<!-- 2025 -->
56+
<div class="timeline-item">
57+
<div class="timeline-year">2025</div>
58+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
59+
<div class="timeline-date">2025 / 09</div>
60+
<h3>๊ฐ€์งœ์—ฐ๊ตฌ์†Œ 11๊ธฐ DevFactory</h3>
61+
<p>์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ(์นœํ•ด์ง€๊ธธ๋ฐ”๋ผ) ๊ฐœ๋ฐœ ๋ฐ JobPT์™€์˜ ์ฝœ๋ผ๋ณด ์ง„ํ–‰ (AI ์ด๋ ฅ์„œ ๋ถ„์„ ๋ฐ ํ”ผ๋“œ๋ฐฑ ์„œ๋น„์Šค ๊ฐœ๋ฐœ).</p>
62+
</div>
63+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
64+
<div class="timeline-date">2025 / 07</div>
65+
<h3>ํ•œ๊ตญ ๋น„์ฆˆ๋‹ˆ์Šค ์‹คํ—˜ ์‹ฌํฌ์ง€์—„ 2025</h3>
66+
<p>Moderated Network Session(๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ - ๋น™๊ณ ) ์šด์˜ ๋ฐ ๊ธฐ์ˆ  ์ง€์›.</p>
67+
</div>
68+
<!-- 2025/05 is likely based on 9th PseudoCon position -->
69+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
70+
<div class="timeline-date">2025 / 05</div>
71+
<h3>9th PseudoCon</h3>
72+
<p>๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ(๋น™๊ณ ) ์šด์˜ ๋ฐ ๋””์ž์ธ ๋ฆฌ๋‰ด์–ผ, ์‹ ๊ทœ ๊ธฐ๋Šฅ ์ถ”๊ฐ€.</p>
73+
</div>
74+
<div class="timeline-content">
75+
<div class="timeline-date">2025 / 03</div>
76+
<div class="role-tag"
77+
style="font-size: 0.6rem; padding: 0.1rem 0.4rem; margin-bottom: 0.5rem; background: rgba(0, 242, 255, 0.2);">
78+
NEW START</div>
79+
<h3>DevSquad์˜ ์ƒˆ๋กœ์šด ์ถœ๋ฐœ, DevFactory</h3>
80+
<p>๊ฐ€์งœ์—ฐ๊ตฌ์†Œ 10๊ธฐ, 'DevFactory'๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒˆ๋กญ๊ฒŒ ์ •๋น„ํ•˜๊ณ  ํŒ€์˜ ์ •์ฒด์„ฑ์„ ๋”์šฑ ๊ณต๊ณ ํžˆ ํ•จ.</p>
81+
</div>
82+
</div>
83+
84+
<!-- 2024 -->
85+
<div class="timeline-item">
86+
<div class="timeline-year">2024</div>
87+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
88+
<div class="timeline-date">2024 / 11</div>
89+
<h3>1st Grand Gathering - sudo pseudo explorer</h3>
90+
<p>๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ(๋น™๊ณ ) ์šด์˜ ๋ฐ ์ถ”๊ฐ€ ๋„คํŠธ์›Œํ‚น ์š”์†Œ ๋„์ž…์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ์„ฑํ™” ์ง€์›.</p>
91+
</div>
92+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
93+
<div class="timeline-date">2024 / 06</div>
94+
<h3>8th PseudoCon</h3>
95+
<p>๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ(๋น™๊ณ ) ์šด์˜ ๋ฐ ํŽธ์˜์„ฑ/๋””์ž์ธ ๊ฐœ์„  ์ž‘์—…์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ณ ๋„ํ™”.</p>
96+
</div>
97+
<div class="timeline-content">
98+
<div class="timeline-date">2024 / 01</div>
99+
<h3>DevSquad ์ถœ๋ฒ”</h3>
100+
<div class="role-tag"
101+
style="border-color: var(--accent-magenta); color: var(--accent-magenta); background: rgba(255, 0, 255, 0.1); font-size: 0.6rem; padding: 0.1rem 0.4rem; margin-bottom: 0.5rem;">
102+
ROOTS</div>
103+
<p>๊ฐ€์งœ์—ฐ๊ตฌ์†Œ 8๊ธฐ, DevFactory์˜ ๋ฟŒ๋ฆฌ๊ฐ€ ๋œ ์—”์ง€๋‹ˆ์–ด๋ง ์กฐ์ง 'DevSquad' ๋ณธ๊ฒฉ ํ™œ๋™ ์‹œ์ž‘.</p>
104+
</div>
105+
</div>
106+
107+
<!-- 2023 -->
108+
<div class="timeline-item">
109+
<div class="timeline-year">2023</div>
110+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
111+
<div class="timeline-date">2023 / 11</div>
112+
<h3>7th PseudoCon</h3>
113+
<p>๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ(๋น™๊ณ ) ์ฒซ ๊ณต๊ฐœ ๋ฐ ๋ถ€์Šค ์šด์˜์„ ํ†ตํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ฒซ ๊ธฐ์ˆ ์  ์กฐ์šฐ.</p>
114+
</div>
115+
<div class="timeline-content" style="margin-bottom: 1.5rem;">
116+
<div class="timeline-date">2023 / 07</div>
117+
<h3>Community Builders</h3>
118+
<p>๊ฐœ๋ฐœ์ž๋“ค๋ผ๋ฆฌ ๋ชจ์—ฌ ๋„คํŠธ์›Œํ‚น์„ ์œ„ํ•œ ๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ(๋น™๊ณ ) ๊ธฐํš ๋ฐ ๊ฐœ๋ฐœ ์‹œ์ž‘.</p>
119+
</div>
120+
<div class="timeline-content">
121+
<div class="timeline-date">2023 / 05</div>
122+
<h3>6th PseudoCon</h3>
123+
<p>๋Œ€ํ™” ์ฃผ์ œ๊ฐ€ ์ ํžŒ ์ข…์ด ํ•œ ์žฅ์—์„œ ์‹œ์ž‘๋œ ๋„คํŠธ์›Œํ‚น ์„ธ์…˜ ์šด์˜.</p>
124+
</div>
125+
</div>
126+
</div>
127+
128+
<div class="journey-cta" style="text-align: center; margin-top: 5rem;">
129+
<a href="/" class="btn-secondary">๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ</a>
130+
</div>
131+
</div>
132+
133+
<footer class="site-footer" style="margin-top: 0;">
134+
<div class="footer-bottom">
135+
<p class="copyright">&copy; 2025 Pseudo-Lab DevFactory. All rights reserved.</p>
136+
</div>
137+
</footer>
138+
</body>
139+
140+
</html>

0 commit comments

Comments
ย (0)