feat: scaffold initial DevPlace project with FastAPI, SQLite auth, and SSR routing

Add complete project skeleton including .gitignore, Makefile, AGENTS.md, config, database init with indexes, main app with router mounting for auth/feed/posts/comments/projects/profile/messages/notifications/votes, Pydantic models for signup/login/post/comment/project/message/profile, and auth router with signup/login page rendering and form handling.
This commit is contained in:
2026-05-10 07:08:12 +00:00
commit 15a3b990fe
54 changed files with 5906 additions and 0 deletions
+186
View File
@@ -0,0 +1,186 @@
.messages-layout {
display: grid;
grid-template-columns: 320px 1fr;
gap: 0;
height: calc(100vh - var(--nav-height) - 2rem);
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
}
.messages-list {
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
}
.messages-list-header {
padding: 1rem;
border-bottom: 1px solid var(--border);
}
.messages-list-header input {
font-size: 0.8125rem;
}
.messages-conversations {
flex: 1;
overflow-y: auto;
}
.conversation-item {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem 1rem;
transition: background 0.2s;
cursor: pointer;
}
.conversation-item:hover {
background: var(--bg-card-hover);
}
.conversation-item.active {
background: var(--accent-light);
}
.conversation-info {
flex: 1;
min-width: 0;
}
.conversation-name {
font-size: 0.875rem;
font-weight: 600;
margin-bottom: 0.125rem;
}
.conversation-preview {
font-size: 0.75rem;
color: var(--text-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.conversation-time {
font-size: 0.6875rem;
color: var(--text-muted);
flex-shrink: 0;
}
.messages-main {
display: flex;
flex-direction: column;
}
.messages-main-header {
padding: 1rem;
border-bottom: 1px solid var(--border);
display: flex;
align-items: center;
gap: 0.75rem;
}
.messages-main-header h3 {
font-size: 1rem;
font-weight: 600;
}
.messages-thread {
flex: 1;
overflow-y: auto;
padding: 1rem;
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.message-bubble {
max-width: 70%;
padding: 0.625rem 0.875rem;
border-radius: var(--radius-lg);
font-size: 0.875rem;
line-height: 1.5;
position: relative;
}
.message-bubble.mine {
align-self: flex-end;
background: var(--accent);
color: #fff;
border-bottom-right-radius: 4px;
}
.message-bubble.theirs {
align-self: flex-start;
background: var(--bg-card-hover);
color: var(--text-primary);
border-bottom-left-radius: 4px;
}
.message-time {
font-size: 0.6875rem;
color: var(--text-muted);
margin-top: 0.25rem;
display: block;
}
.message-bubble.mine .message-time {
color: rgba(255, 255, 255, 0.7);
}
.messages-input-area {
padding: 1rem;
border-top: 1px solid var(--border);
display: flex;
gap: 0.75rem;
}
.messages-input-area input {
flex: 1;
}
.messages-send-btn {
padding: 0.5rem 1rem;
background: var(--accent);
color: #fff;
border-radius: var(--radius);
display: flex;
align-items: center;
justify-content: center;
}
.messages-send-btn:hover {
background: var(--accent-hover);
}
.messages-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
color: var(--text-muted);
gap: 0.5rem;
}
.messages-empty p {
font-size: 0.875rem;
}
@media (max-width: 768px) {
.messages-layout {
grid-template-columns: 1fr;
height: auto;
min-height: calc(100vh - var(--nav-height) - 2rem);
}
.messages-list {
display: none;
}
.messages-list.show {
display: flex;
}
}