Express+EJS+Postgres 사내 개발 포털. - Keycloak OIDC(사번 로그인), GitHub 감성 UI - 사이트 모음 + 프로젝트 공유/코멘트/스타 - DB: OpenEverest appdb portal schema (portal_app role) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
80 lines
3.3 KiB
Plaintext
80 lines
3.3 KiB
Plaintext
<%- include("_header") %>
|
||
<div class="container">
|
||
<div class="layout">
|
||
<!-- 메인: 사이트 모음 + 공유 프로젝트 -->
|
||
<div>
|
||
<div class="box">
|
||
<div class="box-header">🔗 개발 사이트 바로가기</div>
|
||
<div class="box-body">
|
||
<% siteGroups.forEach(function(g){ %>
|
||
<div class="group-title"><%= g.group %></div>
|
||
<div class="site-grid">
|
||
<% g.sites.forEach(function(s){ %>
|
||
<a class="site-card" href="<%= s.url %>" target="_blank" rel="noopener">
|
||
<span class="ico"><%= s.icon %></span>
|
||
<span>
|
||
<span class="name"><%= s.name %></span><br/>
|
||
<span class="desc"><%= s.desc %></span>
|
||
</span>
|
||
</a>
|
||
<% }); %>
|
||
</div>
|
||
<% }); %>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box" style="margin-top:24px">
|
||
<div class="box-header">📂 공유 프로젝트</div>
|
||
<% if (projects.length === 0) { %>
|
||
<div class="box-body muted">아직 공유된 프로젝트가 없습니다. 오른쪽에서 추가해 보세요.</div>
|
||
<% } else { %>
|
||
<% projects.forEach(function(p){ %>
|
||
<div class="proj-item">
|
||
<a class="proj-title" href="/projects/<%= p.id %>"><%= p.title %></a>
|
||
<div class="proj-meta">
|
||
<%= p.owner_name %> · <%= new Date(p.updated_at).toLocaleDateString("ko-KR") %>
|
||
<span class="counter">⭐ <%= p.star_count %></span>
|
||
<span class="counter">💬 <%= p.comment_count %></span>
|
||
</div>
|
||
<% if (p.description) { %><div class="muted" style="margin-top:6px"><%= p.description %></div><% } %>
|
||
<% if (p.tags) { %>
|
||
<div style="margin-top:8px">
|
||
<% p.tags.split(",").map(t=>t.trim()).filter(Boolean).forEach(function(t){ %>
|
||
<span class="tag"><%= t %></span>
|
||
<% }); %>
|
||
</div>
|
||
<% } %>
|
||
</div>
|
||
<% }); %>
|
||
<% } %>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 사이드바: 프로젝트 공유 폼 -->
|
||
<div>
|
||
<div class="box">
|
||
<div class="box-header">➕ 프로젝트 공유</div>
|
||
<div class="box-body">
|
||
<form method="post" action="/projects">
|
||
<label>제목 *</label>
|
||
<input type="text" name="title" required placeholder="내 앱 이름" />
|
||
<label>설명</label>
|
||
<textarea name="description" placeholder="무엇을 만들었나요?"></textarea>
|
||
<label>Repo URL</label>
|
||
<input type="url" name="repo_url" placeholder="https://gitea.bokdev.in/..." />
|
||
<label>앱 URL</label>
|
||
<input type="url" name="app_url" placeholder="https://....apps.bokdev.in" />
|
||
<label>태그 (콤마 구분)</label>
|
||
<input type="text" name="tags" placeholder="node, ai" />
|
||
<div style="margin-top:16px">
|
||
<button class="btn btn-primary" style="width:100%" type="submit">공유하기</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html>
|