Commit Graph

193 Commits

Author SHA1 Message Date
9a93debfc9 chore: document project-wide soft delete pattern and add deleted_by column to all tables 2026-06-11 20:36:47 +00:00
acb3fb43ee fix: correct typo in user authentication error message for invalid credentials 2026-06-12 04:55:10 +00:00
d1dde73877 docs: document agent isolation and result caching in maintenance docs
- Add explanation that each agent runs in isolation, preventing accidental cascading triggers
- Clarify that Maestro runs each agent once and caches results for follow-up questions
- Update style agent description to note context-aware application of project rules
- Wrap leaderboard test page/browser context in try/finally to ensure cleanup on failure
2026-06-12 04:37:12 +00:00
5e6b1c09df feat: add tool scoping and orchestration markers to agent tool registry
Introduce `mark_orchestration_tools`, `set_tool_scope`, and `reset_tool_scope` in `agents/agent.py` to allow runtime filtering of tool payloads by scope and orchestration flag. Refactor `get_tool_payloads` to respect the active scope and exclude orchestration-only tools. Update `agents/core/__init__.py` with `worker_tool_names` helper that returns read/reasoning tools plus conditional write/verify tools per mode, replacing the old `payloads_for` exclusion logic. Modify `agents/maestro.py` to call `mark_orchestration_tools` and wire per-agent result recording via `on_result` callback in `run_fleet`. Extend `agents/orchestrator.py` `run_fleet` signature to accept an optional `on_result` callable and invoke it after each agent run. Revise `agents/style.py` em-dash rule to distinguish prose from data occurrences, and add repository layout guidance to `agents/base.py` MAINT_HEADER.
2026-06-12 04:30:08 +00:00
31841fece4 chore: add agents/reports to gitignore and update agent infrastructure with timestamp streaming, write budget, and codename generation
- Add `agents/reports/` to `.gitignore` to prevent generated agent report files from being tracked
- Implement `_TimestampStream` class and `install_timestamps()` function in `agents/agent.py` for prefixing stdout/stderr with timestamps and elapsed time
- Export `install_timestamps`, `set_write_budget`, `clear_write_budget`, and `set_shell_restricted` from `agents/base.py`; add `_RUN_LOCK`, `AGENT_ICONS` dictionary, and `WRITE_BUDGET = 20` constant
- Add `report_codename()` function and `CODENAME_ADJECTIVES`/`CODENAME_ANIMALS` tuples to `agents/core/__init__.py` for generating random agent report codenames
- Expand `WRITE_TOOLS` tuple in `agents/core/__init__.py` to include `replace_lines`, `insert_lines`, and `delete_lines`; remove `SWARM_TOOLS` from `payloads_for` exclusion list
- Update `CLAUDE.md` and `AGENTS.md` documentation with dataset column initialization rules and new agent infrastructure details
- Reorder route table in `README.md` to list `/uploads` before `/messages` and document Swagger/ReDoc/OpenAPI schema endpoints
2026-06-12 03:37:12 +00:00
7fc9b0f715 chore: add retoor header to all devplacepy source files and update style agent header rule
The diff adds the mandatory `retoor <retoor@molodetz.nl>` header comment to every `.py` file under `devplacepy/` (including `__init__.py` and `routers/__init__.py`), and updates the `StyleAgent` in `agents/style.py` to instruct agents to only add the header on created or already-edited files rather than sweeping the entire repo. The `agents/base.py` operating protocol is also revised to reorder and clarify tool discipline rules.
2026-06-11 23:58:46 +00:00
c38e9c8bfa feat: add autonomous maintenance agent fleet with shared engine and validator
Add the `agents/` directory containing a fleet of autonomous AI maintenance agents for codebase consistency, including a shared async engine (`agent.py`), a dependency-free validator (`validator.py`), and specialized agents for security, audit, docs, style, frontend, SEO, test coverage, and more. Wire the fleet into the Makefile with `--fix`/`--check` modes, document the architecture in `AGENTS.md`, `CLAUDE.md`, and `README.md`, and enforce a hard rule that the `agents/` directory itself is off-limits to any code modification to preserve detection data.
2026-06-11 23:35:31 +00:00
045c36bd38 fix: resolve merge conflict artifacts in docs_api and pagination templates by removing leftover conflict markers and aligning pagination_base usage 2026-06-11 20:36:04 +00:00
78d70d9b08 feat: add audit log tables, indexes, and CLI/content recording hooks 2026-06-11 20:28:17 +00:00
3862958fae feat: add soft delete and media tab for user attachments with admin restore 2026-06-11 18:52:56 +00:00
c74228bc6c feat: make dp-upload label optional and hide label element when empty
The label attribute on the dp-upload component previously defaulted to "Attach files" and always displayed. This change makes the label optional by defaulting to an empty string, hiding the label element when no label is provided, and updating the documentation to reflect the new behavior. The feed template also removes the now-redundant explicit label attribute.
2026-06-11 13:04:01 +00:00
306fae4937 feat: add MessagesLayout class and replace inline scroll/focus script in messages template 2026-06-11 13:14:13 +00:00
cad78d9313 fix: correct messages layout height units and remove autofocus scroll
- Replace `100vh` with `100dvh` in messages-layout height and min-height to properly account for mobile browser dynamic toolbar heights, adjusting offset from 2rem to 3.5rem for consistent spacing
- Remove `autofocus` attribute from message input field to prevent automatic keyboard popup on page load
- Remove `footer` block override that was incorrectly suppressing the site footer on messages page
- Change `input.focus()` to `input.focus({ preventScroll: true })` in the scroll-to-bottom script to avoid unwanted page jumps when focusing the input after sending a message
2026-06-11 13:03:16 +00:00
f611185ac9 fix: reduce comment indentation multipliers for tighter nested display
The comment depth multiplier was reduced from 0.25rem to 0.0625rem for main layout, and from 0.1rem to 0.025rem for mobile breakpoints, with corresponding padding-left reductions in .comment-replies from 0.25rem to 0.0625rem and 0.1rem to 0.025rem respectively. This tightens the visual nesting of threaded comments to prevent excessive horizontal drift in deeply nested reply chains.
2026-06-11 12:25:24 +00:00
85cc812893 fix: reduce comment indentation multipliers for mobile and desktop layouts
Adjust margin-left and padding-left values in .comment and .comment-replies
selectors to use smaller multipliers (0.25rem, 0.1rem) instead of previous
larger values (1.5rem, 0.5rem, 0.25rem) for tighter nested comment display.
2026-06-11 12:14:23 +00:00
5488008216 feat: add /stop and /reset chat commands and bots internals docs section
Add two new chat commands (`/stop` and `/reset`) to the Devii WebSocket handler, enabling users to stop or reset a session via text input. Introduce a new "Bots internals" documentation section with six prose pages covering architecture, personas, content generation, engagement, realism, and configuration for the autonomous bot fleet. Extend the bot service with article scoring, category picking, configurable pause/break timing, and a `gist_min_lines` parameter for LLM client initialization.
2026-06-11 12:06:17 +00:00
3540bc8fa6 feat: add remote URL attachment support and project editing endpoint 2026-06-10 22:17:25 +00:00
9b425b33a5 feat: add h2 database dependency and configure in-memory datasource for dev profile 2026-06-10 07:21:05 +00:00
0dbe1def97 feat: switch ingress proxy to direct container IP routing and capture network metadata on launch
Refactor proxy target resolution to connect straight to the container's bridge IP and container port, bypassing the host port-publishing layer entirely. Introduce `container_ip`/`container_gateway` fields captured from Docker inspect on each running instance, stored alongside status updates. Update the fake backend to emit realistic `NetworkSettings` with per-container IPs. Remove the now-unused `CONTAINER_PROXY_HOST` config default and the old `ports_json`-based host port lookup in the proxy router.
2026-06-10 07:11:56 +00:00
a0cb4ce7f2 feat: add CustomizationToggle class to handle enable/disable toggling via AJAX forms 2026-06-09 21:12:22 +00:00
a3f9b949ca feat: add per-user customization suppression toggles and API endpoints for profile 2026-06-09 20:52:51 +00:00
c2c5166720 fix: remove project_set_private from confirm list and fix async test helpers for event loop safety 2026-06-09 19:16:47 +00:00
19795c6a0a refactor: remove unused imports and reorganize module-level constants across multiple routers 2026-06-09 18:02:50 +00:00
d95541f3c1 feat: add click-to-open profile dropdown with z-index fix and mobile JS handler
Add JavaScript click handler for profile dropdown toggle in MobileNav, replace anchor with button in base template, add explicit profile link to dropdown menu, and apply z-index to nav-badge for proper stacking.
2026-06-09 17:38:44 +00:00
c89dbaf41e style: add responsive CSS tweaks for very narrow screens, mobile fullscreen windows, and safe-area toast positioning 2026-06-09 17:26:34 +00:00
671c42316b fix: replace hardcoded pixel values with CSS custom properties and rem units across multiple stylesheets 2026-06-09 17:03:16 +00:00
c4f2937415 fix: normalize unicode escape sequences and reformat multi-line expressions across codebase 2026-06-09 16:48:08 +00:00
66dfda88bc feat: replace raw setInterval polling with shared Poller utility across six frontend modules 2026-06-09 16:37:49 +00:00
05c6fa7f3b feat: add project fork async job service with cli prune/clear commands and shared container image build target 2026-06-09 14:06:02 +00:00
c565e3b55c feat: add container manager CLI commands and docker-compose overlay for admin container lifecycle 2026-06-09 04:41:27 +00:00
317126efc2 feat: add zip file extraction support with error handling for invalid archives 2026-06-08 23:32:57 +00:00
547e4eda8c docs: add CLAUDE.md with project guidelines and conventions, document new devii admin quota reset endpoints and CLI commands, update README with coverage CI and devii_admin_daily_usd config, add European date normalization to ProjectForm model 2026-06-08 22:30:25 +00:00
97eb58fc19 feat: add project file system with CRUD, upload, inline editing, and video attachment support
- Add new `/projects/{slug}/files` endpoint group for per-project filesystem operations including directory and file CRUD, upload, and inline editing with public read and owner write access
- Extend attachment system to support video formats (webm, ogv, mov, m4v) with proper file icons and MIME types
- Implement configurable allowed file types via `allowed_file_types` site setting, replacing hardcoded `ALLOWED_UPLOAD_TYPES` with dynamic `allowed_extensions()` and `is_extension_allowed()` functions
- Add `delete_all_project_files()` call in `delete_content_item()` to clean up project files when a project is deleted
- Create database indexes on `project_files` table for `(project_uid, path)` and `(project_uid, parent_path)` to optimize file lookups
- Introduce `docs_prose.py` module with `render_prose()` function that renders Markdown content inside `data-render` divs using mistune, enabling dynamic prose rendering in documentation pages
- Enhance docs search with Markdown-aware text stripping (`_demarkdown()`) and improved HTML/script/style sanitization for better search indexing
- Update documentation API samples to reflect new attachment response fields (`is_image`, `is_video`, `mime_type`) and note video format support
- Update README to document the new project files endpoint and clarify AI gateway attribution for guest Devii sessions
2026-06-08 20:51:09 +00:00
e0535bb7c5 feat: add api key auth, devii agent, openai gateway, and admin service management
This commit introduces a comprehensive set of new features including API key authentication with CLI management commands (get, reset, backfill), a Devii agentic assistant with WebSocket terminal and session bootstrap, an OpenAI-compatible LLM gateway service, and an admin service management panel. It also adds Playwright browser automation for bot support, configures internal gateway URLs, refactors content editing/deletion to support JSON API responses, and updates documentation across AGENTS.md, README.md, and the developer docs site.
2026-06-08 15:38:33 +00:00
921e382cbc feat: add reactions, bookmarks, polls modules with session remember config
Add three new feature modules (reactions, bookmarks, polls) with corresponding database tables, indexes, and router registrations. Introduce `SESSION_MAX_AGE_REMEMBER` config for extended session duration, add `get_unread_messages` template global, and include operational defaults for rate limiting and session settings in `site_settings`.
2026-06-06 14:31:42 +00:00
b4e09f4b37 chore: downgrade upload-artifact action from v4 to v3 in CI workflow 2026-06-05 19:51:36 +00:00
f05b6a4faf feat: add canonical redirect, og_image, next_page_url, and sitemap caching across content routers
Implement canonical_redirect helper in content.py to enforce slug-based 301 redirects for gist, news, post, and project detail pages. Add first_image_url helper to extract primary image from item or attachments for Open Graph meta tags. Inject next_page_url into feed, gists, news, and projects list page SEO contexts for pagination link rel. Extend seo.py with SITEMAP_URL_LIMIT, SITEMAP_TTL constants and _sitemap cache variable for future sitemap generation optimization. Update profile page to raise 404 via not_found instead of 302 redirect, and include og_image from avatar_url.
2026-06-05 18:05:07 +00:00
66d91407f5 feat: add next parameter to login flow and redirect unauthenticated users to login page
- Add `next` field to LoginForm model for preserving post-login redirect target
- Implement `safe_next` utility to validate redirect URLs and prevent open redirect vulnerabilities
- Update login page handler to accept and pass `next` query parameter
- Add hidden `next` input to login form template for POST submission
- Modify `require_user` to redirect to `/auth/login` instead of root
- Add `Http.toLogin()` static method in JS for client-side redirect with current URL encoded
- Update CommentManager to redirect unauthenticated reply attempts to login
- Fix comment creation redirect to use `comment_url` instead of generic `redirect_url`
2026-06-05 17:02:30 +00:00
4ad9334be6 feat: add user_id B-tree index to profiles table for faster user lookup queries 2026-06-05 16:43:12 +00:00
5a263cfebe feat: add inline recent comments and reply forms to post cards on feed page
Extract comment item building into `_build_comment_items` helper in database.py, import `get_recent_comments_by_post_uids` in feed router to attach up to 3 recent comments per post, add `post-card-comments` CSS class and `.comment-reply-form` margin rule, refactor `CommentManager` to use event delegation and toggle reply forms via a hidden template, move comment rendering into a reusable `_comment.html` macro, and include recent comments in `_post_card.html` with inline reply capability.
2026-06-05 16:42:43 +00:00
7d4612b2eb style: add touch-friendly min-heights, responsive comment form, and mobile layout refinements across CSS 2026-06-05 16:18:11 +00:00
ffcd6d2863 fix: replace uuid4 with uuid7 via uuid_utils in push and utils modules 2026-06-05 08:14:40 +00:00
9f4bead896 feat: add generic paginate helper and cursor-based load-more across feed, gists, news, and projects
Extract shared PAGE_SIZE constant and paginate() function into database.py, replacing inline cursor logic in feed, gists, news, and projects routers. Introduce `_load_more.html` partial template to unify "Load More" button rendering. Update all affected route handlers to accept `before` query parameter and return `next_cursor` for seamless infinite scroll. Adjust projects count display to use filtered length instead of total. Add test helper `_seed_posts` for pagination coverage.
2026-06-05 03:36:18 +00:00
02b07dce8e feat: add thumbnail_name field to attachment storage and refactor link/delete to batch SQL queries 2026-06-05 02:43:06 +00:00
13870d3219 feat: add service lock file and multi-worker startup guard with session cache clear 2026-06-02 21:17:51 +00:00
a136287d36 feat: add leaderboard router, gamification backfill, and shared content creation helpers
Introduce a new `/leaderboard` endpoint ranking top 50 members by total stars, wire it into the app router and documentation. Implement `_backfill_gamification()` in `database.py` to compute XP/levels for existing accounts from prior posts, comments, votes, and follows. Extract `is_owner()`, `create_content_item()`, and `detail_context()` into `content.py` to centralize content creation, reward awarding, mention notifications, and attachment linking. Update comment creation/deletion in `comments.py` to use `award_rewards()` with `XP_COMMENT` and the new `is_owner()` helper. Add shared template partials documentation for vote bars, star buttons, post headers, and topic selectors to `AGENTS.md`.
2026-05-30 18:16:39 +00:00
ab4861562b fix: change push.register return type to tuple and only send welcome notification on new registration 2026-05-28 22:49:37 +00:00
4cdf49cf8f chore: remove deprecated demo make target and update attachment thumbnail resolution
- Remove `make demo` target from Makefile, AGENTS.md, and README.md
- Improve `_row_to_attachment` to glob for thumbnail files with any extension instead of hardcoding `.jpg`
- Rewrite `cmd_attachments_prune` to use time-based cutoff and `delete_attachment` helper instead of orphan detection
- Add cursor-based pagination to feed and notifications endpoints with `before` parameter
- Track `did_upvote` flag in vote handler to only notify on new upvotes, not vote changes
- Add `PAGE_SIZE` constant and `next_cursor` template variable to notifications page
- Implement Playwright tests for notification pagination with 30 seeded notifications
2026-05-28 22:45:07 +00:00
a8466da5b2 feat: replace JS card-link data-href with CSS overlay and add DOMPurify sanitizer 2026-05-27 20:03:12 +00:00
f0c4feb167 feat: add DOMPurify XSS sanitization pipeline to client-side markdown renderer
- Vendored DOMPurify at static/vendor/purify.min.js, loaded with defer in base.html
- ContentRenderer.js now sanitizes marked output via DOMPurify.sanitize before processMedia
- Fail-closed: render() throws if DOMPurify is undefined instead of emitting unsanitized HTML
- Added _json_ld_dumps helper in seo.py to escape <>&\u2028\u2029 in JSON-LD output
- Updated combine() to use the new safe dumper for all schema.org payloads
2026-05-23 07:10:31 +00:00
74571f7737 feat: replace legacy vote buttons with AJAX submission and dynamic count updates
Replace static form-based vote buttons with a new VoteManager class that submits votes via fetch, returns JSON with net/up/down/current value, and updates vote count spans using data-vote-count attributes across all templates. Add JSONResponse endpoint in votes router for AJAX requests, switch VoteManager import from Http to Toast for error feedback, and refactor link_attachments to handle comma-separated UIDs.
2026-05-27 19:06:18 +00:00
9c55ef272e feat: add resolve_object_url helper and notification click-through with comment highlighting
Extract duplicate target-redirect logic from comments router into a new `resolve_object_url` database function, add `target_url` field to follow and message notifications, create `/notifications/open/{uid}` endpoint that marks notifications read and redirects to their target, implement client-side NotificationManager for card clicks and comment hash scrolling, and add comment-highlight CSS animation.
2026-05-25 14:16:53 +00:00
e30f94c5df feat: add get_top_authors and get_user_stars functions with profile star aggregation
Implement two new database functions: get_top_authors aggregates star counts across posts, projects, and gists tables with 60-second TTL caching, and get_user_stars computes total stars for a given user_uid. Refactor feed page to use get_top_authors instead of raw users table query, and display aggregated star count on profile pages via get_user_stars. Add Playwright integration test verifying profile star count increments after a post vote.
2026-05-23 08:54:45 +00:00
4d87532951 fix: add mobile-web-app-capable meta tag to base.html for PWA support 2026-05-23 08:35:40 +00:00
3c55ae1bb1 feat: add PWA support with push notifications, service worker, and offline page
Implement progressive web app capabilities including VAPID-based push notification infrastructure, service worker with offline caching, PWA install prompt handling, and manifest configuration. Add push.py module for VAPID key generation and notification delivery, PushManager and PwaInstaller JavaScript classes, service worker with precache and push event handling, offline fallback page, and app icons at multiple resolutions.
2026-05-23 08:08:26 +00:00
387b2d8f96 feat: add push notification infrastructure with VAPID key generation and PWA manifest support
- Introduce push notification module with VAPID certificate generation, Web Push encryption, and subscription management
- Add push registration table index and database schema for storing user subscriptions
- Integrate push notification dispatch into existing notification creation flow via async background tasks
- Include PWA manifest, service worker, and install prompt UI elements in base template
- Register new push router and ensure certificate initialization on application startup
- Add configuration variables for VAPID private/public key file paths and subscription contact email
- Update JavaScript application entry point with PushManager and PwaInstaller modules
- Extend top navigation bar with hidden install and push enable buttons for authenticated users
2026-05-23 08:03:27 +00:00
1aca8b7f76 feat: add dynamic gist language sidebar filtering based on existing database entries
Add a new `get_gist_languages()` function in database.py that queries distinct language codes from the gists table and caches results for 60 seconds. Create a database index on the `language` column of the gists table for efficient queries. Update the gists router to pass the set of active language codes to the template. Modify the gists.html sidebar to only display language filter links for codes that actually have gists in the database, hiding empty language categories and conditionally showing the plaintext link.
2026-05-23 07:00:52 +00:00
116aeadabf feat: add content CRUD helpers, avatar component, and utility JS classes for devplacepy 2026-05-23 06:41:47 +00:00
d7d8314da0 refactor: extract star/notification/badge helpers into database.py and add enrich_items content module
Introduce `update_target_stars`, `get_target_owner_uid`, and `VOTABLE_TARGETS`/`STAR_TARGETS` in database.py; replace inline badge insertion with `award_badge()` and inline notification creation with `create_notification()` across auth, comments, and follow routers; add `enrich_items()` in new content module to centralize post/gist list assembly and remove duplicated enrichment logic from feed and gists routers.
2026-05-23 06:34:13 +00:00
ab1121a42a feat: add get_int_setting helper and skip empty values in admin settings save
Introduce `get_int_setting()` in database.py to safely parse integer settings with a default fallback, replacing repeated `int(get_setting(...))` calls in uploads.py and templating.py. In admin.py, skip saving settings entries when the submitted value is an empty string, preventing accidental overwrites with blank values.
2026-05-23 04:55:11 +00:00
54ada85b20 fix: remove unused import of get_users_by_uids from projects router
The import statement for `get_users_by_uids` was removed from the project_detail endpoint in `devplacepy/routers/projects.py` as it was no longer used after a prior refactor of user lookup logic. This eliminates a dead code path and potential linting warnings.
2026-05-23 04:21:41 +00:00
8ff4b351da feat: add TTLCache, post/news count helpers, and avatar ETag caching across modules 2026-05-23 04:20:27 +00:00
7285432ea7 feat: add AdminSettingsForm model and migrate admin settings endpoint to Pydantic validation 2026-05-23 03:55:50 +00:00
92911bedc9 feat: replace raw form parsing with pydantic models for auth, admin, bugs, comments, and gists
Migrate all route handlers from manual `request.form()` parsing to typed `Annotated[Model, Form()]` dependencies using new pydantic models (SignupForm, LoginForm, ForgotPasswordForm, AdminRoleForm, AdminPasswordForm, BugForm, CommentForm, GistForm). Remove inline validation logic from signup, login, password reset, admin role/password change, bug creation, comment creation, and gist creation endpoints, delegating validation to model validators and field constraints. Add `RequestValidationError` exception handler with friendly error messages for auth form pages. Update model definitions to use `field_validator` and `model_validator` for cross-field checks like password matching.
2026-05-23 03:44:04 +00:00
26a2d3280f feat: add vendor static assets for syntax highlighting and code editor
Add minified CSS and JS vendor files for CodeMirror editor and Atom One Dark syntax theme, including language modes for C-like, CSS, Dart, and Go.
2026-05-23 02:29:26 +00:00
77ad93a4bb feat: add structured data schemas, og tags, share button, and configurable site url 2026-05-23 01:21:55 +00:00
8eea7cc0c9 feat: add news sanitize CLI command and upload static file serving with content-disposition 2026-05-22 23:50:31 +00:00
92c1bfca47 feat: update multiavatar import path and call signature in generate_avatar_svg
The change modifies the import statement from `multiavatar` to `multiavatar.multiavatar` and updates the function call to pass `None, None` as additional arguments, aligning with a newer version of the multiavatar library's API.
2026-05-19 21:36:17 +00:00
8bbd4db848 fix: log full exception trace before warning on avatar generation failure for seed 2026-05-19 21:27:44 +00:00
5bb8b12bc1 style: add missing space after icon spans in feed navigation links 2026-05-16 01:29:43 +00:00
299d0602f1 fix: remove required attribute from gist source textareas and fix emoji-picker script type 2026-05-16 01:10:55 +00:00
ed8d8b3ac1 fix: fix blank chat bubbles on mobile by adjusting input area layout and send button styling
- Reduced input area padding from 1rem to 0.75rem 1rem and switched from flex-wrap to align-items center with smaller gap
- Changed send button from rectangular with padding to a 36px circular button with centered icon and hover transition
- Added flex-shrink and min-width:0 to text input to prevent overflow on narrow screens
- Added full-width attachment preview container with negative order to stack above input row
- Injected JavaScript to auto-scroll message thread to bottom and focus input on page load for mobile UX
2026-05-16 01:02:10 +00:00
9cedfb6329 feat: add clickable post title links and inline upvote forms to profile template
Wrap post titles in anchor tags linking to post detail pages, make post content divs clickable to navigate on non-link clicks, and replace static star/comment indicators with inline upvote forms and dynamic vote count display in profile.html.
2026-05-16 00:58:43 +00:00
9e2bfd271b fix: clear unread notification cache after inserting new notifications in comments, follows, messages, votes, and mentions 2026-05-16 00:49:53 +00:00
85acc0f481 fix: prevent duplicate notification triggers by extracting only last @ in mention prefix 2026-05-16 00:33:14 +00:00
9553e30a79 feat: add downvote button and vote count display to feed and post detail templates 2026-05-16 00:31:11 +00:00
f4b825984a fix: update responsive breakpoints from 768px to 1024px in base.css for topnav-links, breadcrumb, and page media queries 2026-05-15 23:56:07 +00:00
1b4a60619e feat: add responsive layout with media queries for mobile and tablet breakpoints
Implement responsive design adjustments across admin, auth, base, feed, gists, landing, messages, news, notifications, post, profile, projects, and services CSS files with collapsible sidebar, touch-friendly navigation, and reordered content sections for screen widths below 768px and 480px. Add hamburger menu toggle, mobile overlay panel, and back button for messages view in Application.js.
2026-05-15 23:34:45 +00:00
34cae11630 fix: replace deprecated datetime.utcnow with timezone-aware datetime.now in all modules and fix comment count query column name 2026-05-14 02:12:19 +00:00
a38fecedac feat: pass request as first positional arg to all TemplateResponse calls across routers
The diff shows a systematic refactor across 14 router files and main.py where every invocation of `templates.TemplateResponse` now receives the `request` object as its first positional argument, shifting the template name from first to second position. This change touches 30+ call sites in auth, feed, gists, messages, news, notifications, posts, profile, projects, services, bugs, admin, and the main error handlers, ensuring consistent Jinja2 template rendering with explicit request context injection for all HTTP responses.
2026-05-13 21:03:06 +00:00
1c5406204e chore: remove unused imghdr import and dead CSS rules, fix attachment uploader DOM structure, add space after icon spans in templates, and increase test stderr capture limit 2026-05-13 20:48:39 +00:00
4958c23c0d fix: migrate CI branch references from master to main and add comments created_at index 2026-05-13 19:17:57 +00:00
aa88f18c03 chore: add docker infrastructure, gists feature, attachment system, and admin CLI tools
- Add .dockerignore, Dockerfile, and docker compose targets to Makefile for containerized deployment
- Implement gists router with CRUD operations, database schema, and polymorphic comment/vote reuse
- Create attachment upload system with thumbnail generation, MIME detection, and storage path management
- Add attachments_prune CLI command to clean orphaned attachment records and files
- Introduce rate limiting middleware with 60 requests per minute window
- Add custom 404 and 500 error handlers with SEO-optimized template responses
- Extend database initialization with gists and attachments indexes plus upload site settings defaults
- Update load_comments to include attachment mapping for comment resources
- Register gists and uploads routers in main application and update AGENTS.md documentation
2026-05-12 13:07:34 +00:00
ff2585b098 feat: add mention notification creation and user search endpoints across multiple routers 2026-05-12 11:08:38 +00:00
388d4e3af8 docs: document DEVPLACE_DISABLE_SERVICES env var, news router, modal class toggle, and news service behavior 2026-05-12 10:45:52 +00:00
331e19b14e feat: add news module with admin panel, pagination, and service toggle via env flag 2026-05-11 20:12:43 +00:00
f7ca123cd6 feat: add threaded comments with polymorphic targets and slug-based routing
Introduce `load_comments` helper supporting polymorphic target types (post, project, bug) with nested parent-child threading. Refactor comment creation to use `target_type`/`target_uid` and `resolve_target_redirect` for correct redirects. Replace raw UID-based post/project routes with slug-aware resolution via `resolve_post`/`resolve_project` and `make_combined_slug`. Update SEO, sitemap, and FAB styling to use slugs and hardcoded red accent. Add reusable `_comment_section.html` template.
2026-05-11 18:49:45 +00:00
502f77f718 fix: correct typo in progress tracking variable name from Progss to Progress 2026-05-11 05:02:06 +00:00
140cceff64 feat: add admin CLI, SEO meta tags, security headers, and production Makefile targets 2026-05-11 03:30:51 +00:00
fda3a202dc feat: replace DiceBear avatar proxy with local Multiavatar SVG generation and remove avatar_style from signup 2026-05-11 01:14:43 +00:00
d8ef8ebef2 chore: remove pre-locust test stubs and add daily topic, follow router, password reset, image upload, and badge awarding features 2026-05-10 22:41:41 +00:00
f4343c3d05 feat: add DiceBear avatar proxy with style picker on signup and profile pages
Implement avatar generation via local proxy at `/avatar/{style}/{seed}` that fetches from DiceBear 9.x API with in-memory caching and fallback to initial-based SVG. Add avatar style selection dropdown to signup form and profile edit page, storing `avatar_style` in user records. Update comment rendering to support nested threading with parent-child relationships in post view. Add `avatar_url` and `avatar_styles` template globals, register avatar router in main app, and include avatar CSS classes for rounded image display.
2026-05-10 19:33:53 +00:00
15a3b990fe 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.
2026-05-10 07:08:12 +00:00