Commit graph

216 commits

Author SHA1 Message Date
9d59a3ca8a Add JSON API for agent access (/api/v1/)
REST API with endpoints for threads, replies, nodes, and email OTP
authentication. Includes in-memory sliding-window rate limiting,
global api.enabled INI kill-switch, per-namespace api_access opt-out
with settings UI checkbox, and 500k character content limit (~128k
tokens) for long-form agent content. Ships enabled by default.
2026-02-01 14:49:01 -05:00
8666e97721 Only show Comments header in site mode, not embed mode 2026-01-29 09:40:00 -05:00
b39e5dd55d Add Comments section header to distinguish from main content 2026-01-29 09:38:15 -05:00
3ac6cbee50 Add margin-top to reply form for spacing from content 2026-01-29 09:36:26 -05:00
4d8d77c9b8 Add postmortem for duplicate email accounts issue 2026-01-29 09:32:22 -05:00
cc968f6c5f Enable remarkbox-theme-meta dependency for deployment 2026-01-29 09:16:15 -05:00
8d838dbcba Fix merge script to handle duplicate namespace/watcher constraints 2026-01-29 09:15:33 -05:00
8b4d0bdeb6 Add GitLab pipeline status check to CLAUDE.md 2026-01-29 09:12:04 -05:00
9330782999 Fix case-sensitive email duplicates and add merge script
- Normalize emails to lowercase on user creation
- Use case-insensitive lookup in get_user_by_email
- Add merge_duplicate_email_users script to merge existing duplicates
- Add unit and integration tests to prevent regression
- Update CLAUDE.md with tmux-hosts production troubleshooting
2026-01-29 08:33:35 -05:00
df5c656eb0 Add whitespace between thread and new message form 2026-01-29 07:31:01 -05:00
32b1eae840 Fix getElementById('') warning when no hash fragment present 2026-01-28 07:50:45 -05:00
8971a46659 Hide preview toggle when JavaScript is disabled 2026-01-24 08:35:35 -05:00
67648f06f9 Persist preview visibility state in localStorage 2026-01-24 08:04:37 -05:00
2f8e676f78 Add template syntax validation tests
Validates all Jinja2 templates can be parsed without syntax errors.
Catches issues like mismatched {% if %}/{% endif %} blocks before deployment.
2026-01-22 12:48:02 -05:00
a49446cfef Add parallel test execution with pytest-xdist
Implements per-worker database isolation for parallel test runs:
- Add pytest-xdist and pytest-cov to test dependencies
- Configure Makefile to run tests with -n auto flag
- Update test.ini to use environment variable for database path
- Create conftest.py with per-worker database isolation
- Enable SQLite WAL mode for better concurrency
- Auto-cleanup test databases after completion

Expected performance improvement similar to make_post_sell (~16x speedup).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-21 12:36:31 -05:00
06ba106795 Fix sitemap lastmod date format for Google 2026-01-11 09:28:59 -05:00
a6c04d565a Add google_site_verification support for namespaces
- Add google_site_verification column to rb_namespace table
- Add settings form field in Stand-alone Mode Settings
- Render meta tag on root path when set
- Update CLAUDE.md with Alembic migration workflow
- Fix development.ini alembic paths
2026-01-11 09:11:07 -05:00
9936b21467 Add twine-venv target in /tmp for PyPI uploads
Uses a persistent virtualenv in /tmp/twine-venv to avoid
relying on system python/twine in CI.
2025-12-29 09:35:08 -05:00
00edd84398 Update .gitlab-ci.yml file 2025-12-29 14:31:53 +00:00
a362190ea5 Update .gitlab-ci.yml 2025-12-29 14:29:28 +00:00
033fe1f1a7 Update setup.py 2025-12-29 14:26:10 +00:00
43f794e385 Merge branch 'anonymous' into 'main'
Add allow_anonymous namespace setting for email-free commenting

See merge request engineering/remarkbox/remarkbox!29
2025-12-20 16:26:51 +00:00
6b2be261f5 Add functional tests for anonymous commenting feature
Tests cover:
- Anonymous reply creates UserSurrogate
- Anonymous reply with no name defaults to 'Anonymous'
- Regular namespace still requires email
- Anonymous comments are marked as verified
- Namespace settings toggle for allow_anonymous
2025-12-20 11:17:12 -05:00
19415fff06 Add allow_anonymous namespace setting for email-free commenting
When enabled, commenters can post with just a display name (no email required).
Comments are attached to UserSurrogate instead of User.

Trade-offs for anonymous commenters:
- No email notifications for replies
- Cannot edit their comments
- Cannot log in to manage comments
- No cross-site identity

Works with existing moderation (hide_unless_approved) - anonymous
comments are never auto-approved when moderation is enabled.
2025-12-20 11:06:31 -05:00
8b353fc7ec Merge branch 'import-comments-feature' into 'main'
Add import comments feature with support for WordPress, Disqus, and Graphcomment

See merge request engineering/remarkbox/remarkbox!26
2025-12-20 15:41:40 +00:00
58da72d344 Fix overflow hidden cutting off avatars on mobile 2025-12-20 07:07:00 -05:00
e0fbd06e10 Add CSS animation for node-children collapse/expand 2025-12-20 06:26:53 -05:00
89abc7e7af Move Step 3 payment form back into proper position 2025-12-19 22:05:23 -05:00
952120e5c5 Fix test to match new billing page text 2025-12-19 22:00:44 -05:00
5c2a279eb6 Move payment form outside conditionals so it always shows 2025-12-19 21:56:12 -05:00
2762fcd792 Add inline payment form to setup page 2025-12-19 21:53:08 -05:00
f1107b17a0 Simplify billing to minimal inline form 2025-12-19 21:50:19 -05:00
4d319c5647 Simplify billing to single pay-what-you-want form 2025-12-19 21:48:53 -05:00
de1e7ca83b Streamline billing page to single payment form
- Replace multiple forms with single unified payment form
- Remove deprecated pay_what_you_can preferences (no longer needed with Stripe Checkout)
- Remove pay-what-you-can route and view
- Simplify setup-namespace to just link to billing
- Update tests for new billing UI
2025-12-19 21:40:12 -05:00
f4baebedc6 Merge branch 'stripe-neo' into 'main'
Replace deprecated Stripe Sources API with Stripe Checkout

See merge request engineering/remarkbox/remarkbox!28
2025-12-20 02:31:52 +00:00
499ce162e4 Replace old card UI with link to billing page in setup-namespace 2025-12-19 21:27:42 -05:00
a6b527a6b2 Add cascade delete to payments relationship 2025-12-19 21:23:48 -05:00
884d5afd7d Remove old stripe_id references from tests and docs 2025-12-19 21:20:34 -05:00
a0206833a9 Remove deprecated stripe_id from User model
- Remove User.stripe_id column (no longer used with Stripe Checkout)
- Show billing link to all authenticated users in phone menu
- Remove old Stripe customer cleanup from tests
2025-12-19 21:17:43 -05:00
dd63ff22f3 Remove unnecessary migration file (tables auto-created on deploy) 2025-12-19 21:13:04 -05:00
83cf970b47 Add tests for Stripe Checkout integration
- Add test_stripe.py with unit tests for checkout module and Payment model
- Add functional tests for billing views (pay-what-you-can, checkout, success)
- Fix mock imports for Python 3 compatibility (unittest.mock)
- Remove unused stripe.j2 imports from templates
2025-12-19 21:05:43 -05:00
acfbe52a65 Replace deprecated Stripe Sources API with Stripe Checkout
- Add stripe/checkout.py module for Stripe Checkout Sessions
- Add Payment model to track completed payments
- Update billing page with pay-what-you-want, annual, and top-up options
- Keep pay_what_you_can preferences, add Pay Now button for actual payment
- Add webhook handler for Stripe events
- Remove old card management code (deprecated Sources API)
- Update stripe requirement to >=5.0.0
2025-12-19 20:52:38 -05:00
f641d39b11 Merge branch 'css-toggle' into 'main'
Add CSS animations and minimal auto-focus JS with graceful fallback

See merge request engineering/remarkbox/remarkbox!27
2025-12-20 01:19:19 +00:00
b8f88c7cfa Update JAVASCRIPT.rst documentation 2025-12-19 19:58:05 -05:00
6e624f392c Remove jQuery, convert to vanilla JS, add textarea auto-grow
- Remove jQuery (84KB) - all functionality now vanilla JS
- Remove legacy google-analytics.j2 (using gtag v4 instead)
- Remove ie8.polyfils.min.js (IE8 is dead)
- Add X-Requested-With header for AJAX preview requests
- Textareas auto-grow up to 400px as content is added
- Auto-grow triggers on toggle open if textarea has content
2025-12-19 19:54:53 -05:00
ef8f382976 Replace jQuery toggle animations with CSS-based animations
- Use CSS keyframes (slideDown/slideUp) for 800ms door-like animations
- JS only toggles classes and updates button text at correct timing
- Preview toggle uses native <details> with animated open/close
- Arrow indicators on right side (hide preview ▲ / show preview ▼)
- No-JS fallback preserved (links navigate to dedicated pages)
2025-12-19 19:32:11 -05:00
9c74e6256a Add CSS animations and minimal auto-focus JS with graceful fallback
- CSS grid animation for smooth expand/collapse transitions
- Fade-in animation for namespace dropdown
- Auto-focus textarea on details open (progressive enhancement)
- Falls back gracefully if browser lacks support
2025-12-19 17:53:29 -05:00
18a65fb506 Replace JS toggle with pure CSS using HTML details element 2025-12-19 16:15:12 -05:00
eb9383178d Replace email with user name and UUID in notification logs 2025-12-11 10:22:04 -05:00
97deb91320 Skip loading namespaces in embed mode
The namespace switcher is not visible in embed mode, so we don't need to
load the user's namespaces list. This reduces unnecessary database queries.
2025-12-11 08:10:28 -05:00