Commit Graph

1042 Commits

Author SHA1 Message Date
Ylber Gashi
3440069fe8 Fix WebView error reporter to show message instead of stack trace (#365)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 22:53:03 +02:00
Ylber Gashi
8d3020e6e5 Unify mobile data access hooks with shared packages/ui (#363)
Mobile duplicated useLiveQuery, useQuery, useMutation, and buildQueryClient
from packages/ui with the only difference being the executor mechanism
(appService.mediator vs window.colanode). This consolidates them by:

- Adding a DOM-free core-api module to packages/ui with getColanode() and
  getEventBus() helpers that access globalThis, avoiding Window/DOM types
- Updating shared hooks and buildQueryClient to use these helpers instead
  of window.colanode/window.eventBus directly
- Installing a globalThis.colanode bridge in mobile's _layout.tsx that
  delegates to appService.mediator (matching the web/desktop pattern)
- Migrating all 41 mobile files to import hooks from @colanode/ui
- Deleting 4 duplicate mobile files (3 hooks + query-client)
- Adding Metro resolver override to force react/react-native resolution
  from the mobile app's node_modules (packages/ui ships a separate
  web-only React 19.2.4 that conflicts with mobile's RN-compatible 19.1.0)

Also standardizes useQuery to use buildQueryKey instead of inline sha256.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 19:11:18 +01:00
Ylber Gashi
591f69885e Consolidate mobile WebView editor logic into shared packages/ui (#362)
Extract duplicated CRDT lifecycle, node views, record layout, and database
layout from the mobile WebView editor into shared primitives in packages/ui.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 15:52:32 +01:00
Ylber Gashi
7e1ec764c7 De-duplicate mobile database view logic into shared packages/ui (#361)
Extract duplicated database view business logic from
apps/mobile/webviews/editor/src/database-runtime.tsx (734→188 lines)
into shared packages/ui components and hooks:

- Add NavigationContext for platform-agnostic node navigation
  (desktop uses TanStack Router, mobile uses WebView bridge)
- Extract useDatabaseViewValue hook with all DatabaseViewContext
  computation (fields, filters, sorts, record creation)
- Make DatabaseViews accept renderLayout prop for custom view rendering
- Refactor ViewFullscreenButton and TableViewNameCell to use
  NavigationContext instead of hardcoded TanStack Router Link
- Fix TableViewNameCell canEdit to use useRecord().canEdit (was
  hardcoded true on desktop)
- Add readOnly={database.isLocked} to shared TableViewRow
- Merge mobile's view-delete logic into shared TableViewSettings
- Keep open-record button always visible on mobile (no hover)
- Add database node type support to mobile rename-node-sheet

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 00:21:48 +01:00
Ylber Gashi
53e2b14515 Mobile: database views, record editing, and WebView bridge improvements (#360)
Add database table view and record detail screens rendered inside the
WebView using shared @colanode/ui components. Extend the bridge protocol
with query subscriptions, event forwarding, and global focus tracking for
keyboard avoidance. Fix flush on navigation/background to cover all
debounced mutations. Update README to reflect current feature set and
document the intentional database-runtime duplication.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:16:54 +01:00
Ylber Gashi
d3f863f2fa Mobile: server role security, routing fixes, conversation pagination, accessibility, and file download unification (#359)
Close cross-workspace IDOR in role updates, reject invalid invite roles server-side,
fix no-workspace routing, add workspace delete flow, batch reaction queries,
add conversation pagination, improve accessibility labels, and unify file download pipeline.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 21:46:24 +01:00
Ylber Gashi
39026f09a0 Mobile: server role security, routing fixes, conversation pagination, accessibility, and file download unification (#359)
Close cross-workspace IDOR in role updates, reject invalid invite roles server-side,
fix no-workspace routing, add workspace delete flow, batch reaction queries,
add conversation pagination, improve accessibility labels, and unify file download pipeline.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 21:35:10 +01:00
Ylber Gashi
b2efa1b09c Mobile: stability fixes for auth, workspace settings, editor sync, and file downloads (#358)
Align password validation with shared schema, harden workspace/member role
invariants on both client and server, fix page editor CRDT reconciliation
for incremental updates, and replace file download polling with reactive
local-file state tracking.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 13:47:24 +01:00
Ylber Gashi
de626ab613 Fix workspace lifecycle: auto-init synced workspaces, clean up deletions, select workspace on auth (#357)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 11:49:15 +01:00
Ylber Gashi
36b08964b5 Mobile: QoL polish sprint — toast, haptics, chat sorting, skeletons, scroll-to-bottom (#356)
Replace blocking Alert.alert error callbacks with non-blocking slide-down toast
notifications across ~15 mutation error handlers. Add expo-haptics for tactile
feedback on long-press actions, message send/edit, emoji selection, and reaction
toggles. Sort chat lists by updatedAt instead of createdAt so most-recently-active
conversations appear first. Bold unread chat names and improve preview contrast.
Add skeleton loading placeholders (page, file, message, list variants) replacing
generic spinners. Add scroll-to-bottom floating button in message lists. Extract
reusable ListSeparator component. Gate SQL query logging behind __DEV__. Tune
FlatList performance with removeClippedSubviews and render batching. Fix home
screen space avatars and simplify quick action labels.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 11:26:38 +01:00
Ylber Gashi
96bb8c25c6 Mobile: fix validation toolchain and add test coverage for utility modules (#355)
Fix lint errors (import ordering), resolve FileReadStream type mismatch
for mobile's Blob-based readStream, move tests from src/__tests__ to
top-level test/ directory matching web/server conventions, and add tests
for emoji, message, node, radar utils plus an in-memory error log for
debugging experimental builds.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 11:19:41 +01:00
Ylber Gashi
b61d2c91c3 Mobile: add node icon editing with emoji and icon picker (#354)
Allow users to change icons for spaces, channels, pages, and folders
from the rename sheet. Supports both emoji and built-in icon selection
with a tabbed picker UI. Node lists now display custom avatars.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 01:21:41 +01:00
Ylber Gashi
cbe095ff60 Mobile: add space collaborator management and space deletion (#353)
Add a Space Settings screen accessible via a gear icon in the space
header (admin-only). The screen allows managing collaborators (add,
change role, remove with last-admin protection) and deleting a space.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 01:15:22 +01:00
Ylber Gashi
51a301e79f Mobile: add settings icons, profile card, and fix new chat user list (#352)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 01:00:58 +01:00
Ylber Gashi
86e1e597ab Mobile: fix light mode UI issues and page editor keyboard scrolling (#350)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 17:28:14 +01:00
Ylber Gashi
0bac909477 Mobile: reliability, polish, and test infrastructure sprint (#349)
Consolidate duplicated utility functions into shared format-utils module.
Replace unsafe static ref pattern in PageWebView with forwardRef/useImperativeHandle.
Stabilize useNodeListQuery memoization by replacing JSON.stringify deps.
Add React.memo to FlatList item components (MessageItem, ChatListItem,
SpaceListItem, FileItem). Wrap all tab route layouts with ErrorBoundary.
Set up jest-expo test infrastructure with initial format utility tests.
Add empty states for message list and home screen. Add accessibility
labels to buttons, inputs, list items, and navigation elements. Create
animated skeleton loading components for node lists. Fix pre-existing
lint errors in import ordering.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 16:47:10 +01:00
Ylber Gashi
0cfb1cdd50 Mobile: update README with architecture diagrams and comprehensive docs (#348)
Add Mermaid diagrams showing how mobile relates to other clients, the
local-first data flow, and the embedded page editor bridge. Expand
feature list, project structure, and dependency documentation.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 16:03:44 +01:00
Ylber Gashi
2cd02255c7 Mobile: keyboard avoidance and toolbar for page editor WebView (#347)
Add keyboard tracking, automatic content scrolling, and a native toolbar with block type selection for the page editor. The toolbar appears above the keyboard with "+" button for block types and a dismiss button. Keyboard height is tracked via native events and communicated to the WebView for cursor scroll-into-view. Block type selection is inline (not modal) to prevent keyboard dismissal during interaction.

- Track keyboard height in page screen with iOS/Android event listeners
- Use KeyboardAvoidingView for proper layout when keyboard is visible
- Add toolbar component with "+" (block types) and dismiss buttons
- Implement inline block type selector (no modal to preserve keyboard)
- Extend bridge protocol: keyboard.show/hide, editor.blur, block.command, editor.focus
- Handle block command execution in WebView with correct TipTap node commands
- Expose editor instance on window.__editorInstance for command execution
- Add focus/blur callbacks to notify native of editor state
- Send cursor position to scroll-into-view when keyboard shows
- Increase ProseMirror padding-bottom from 40vh to 60vh for comfortable scrolling
- Remove focus-restoration script that prevented cursor following

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-15 23:18:11 +01:00
Ylber Gashi
2be4b599e7 Mobile: fix page editor keyboard and interaction issues (#346)
* Mobile: add prebuild hook and submit config for EAS builds

Add prebuildCommand to run copy-editor.js during EAS builds so the
editor.html asset is available for Metro bundling. Also restore the
App Store Connect submit credentials (appleId, appleTeamId, ascAppId)
so builds auto-submit to TestFlight.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Mobile: use eas-build-post-install hook for editor asset

prebuildCommand replaces expo prebuild entirely, causing build failures.
Use eas-build-post-install lifecycle hook instead to run copy-editor.js
after npm install but before the native build.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Mobile: fix page editor keyboard and interaction issues

- Disable native WebView scrolling and use CSS overflow to prevent
  scroll-to-top when keyboard opens
- Fix slash command click-through by preventing ProseMirror from
  processing mousedown events immediately after command selection
- Remove keyboard from auto-opening on page load and auto-focusing
  cursor; keyboard now only appears on user tap
- Add eas-build-post-install hook to build editor HTML asset during
  EAS builds
- Improve editor.html iframe sandbox and CSP settings

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 22:17:36 +01:00
Ylber Gashi
c945579abd Mobile: WebView-based page editor with TipTap (#345)
* Mobile: replace inline page editor with WebView-based TipTap editor

Replaces the plain-text block-by-block page editor with a Vite-built
WebView that runs the full TipTap rich text editor. The editor HTML is
bundled as a single self-contained asset, loaded via expo-asset and
rendered in react-native-webview. Communication between RN and the
WebView uses postMessage/onMessage bridge for init, mutations, queries,
theme changes, and navigation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Mobile: reorganize WebView editor as standalone package

Moves the editor WebView app from apps/mobile/src/editor-webview/ to
apps/mobile/webviews/editor/ as a first-class build target with its own
package.json, tsconfig.json, and vite.config.ts. This fixes TypeScript
compilation (editor code no longer typechecked as React Native) and
makes the build story clearer.

- WebView editor is now at apps/mobile/webviews/editor/
- Built artifact copied to apps/mobile/assets/editor-dist/ on prestart
- Vite dev server support for fast iteration
- Tailwind CSS @source path fixed (../../../../packages/ui)
- Page title editing restored via RenameNodeSheet
- File preview now converts file:// to base64 data URLs for WebView
- WebView hidden until ready to avoid white flash
- Keyboard accessory bar hidden on iOS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:43:17 +01:00
Ylber Gashi
0711b24d5b Mobile: set up EAS Build and TestFlight for iOS team testing (#343)
* Mobile: set up EAS Build and TestFlight distribution for iOS team testing

- Add eas.json with production build profile (Node 22.16.0)
- Configure iOS app signing and provisioning via EAS
- Add Metro mocking for Kysely FileMigrationProvider (Hermes compilation error)
- Pin react-dom@19.1.0 to match react version (package.json overrides)
- Store EAS projectId in app.json for Expo CLI integration

The app now builds on EAS cloud and distributes to TestFlight. Team members can be added as internal testers for easy installation on their iPhones.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* Mobile: set up EAS Build and TestFlight distribution for iOS team testing

- Add eas.json with production build profile (Node 22.16.0)
- Configure iOS app signing and provisioning via EAS
- Add Metro mocking for Kysely FileMigrationProvider (Hermes compilation error)
- Pin react-dom@19.1.0 to match react version (package.json overrides)
- Store EAS projectId in app.json for Expo CLI integration

The app now builds on EAS cloud and distributes to TestFlight. Team members can be added as internal testers for easy installation on their iPhones.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-14 22:24:45 +01:00
Ylber Gashi
6bfa81f305 Mobile: use node-level permissions for UI action gating (#342)
Replace workspace-role checks with node-role checks derived from the
root space's collaborators map. This aligns mobile with the shared
permission model used by web/desktop: rename requires editor, delete
requires admin, create children requires editor, and message deletion
is allowed for the author or any admin.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 13:30:40 +01:00
Ylber Gashi
7c0a226bc4 Mobile: add inline page editing with CRDT persistence (#341)
* Mobile: add inline page editing with CRDT persistence

- Inline Notion-style editing: tap and type directly on pages (no separate edit mode)
- Permission-gated via useNodeRole hook (editor access required)
- CRDT save pipeline: debounced YDoc updates via document.update mutation
- Title saved separately via node.update on blur and navigation
- Block type changes via long-press (paragraph, headings, lists, tasks, quotes, dividers)
- Unsupported blocks (tables, code, files, embeds) preserved unchanged and rendered read-only
- Auto-flush on app background, navigation away, and unmount
- Remote reconciliation when no pending local edits

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Mobile: restore full BlockRenderer for non-editable page blocks

Revert to using BlockRenderer for non-editable blocks in the page
editor (files, pages, folders render with rich previews). Revert
hacky kysely-service transaction retry — the SQLite transaction
error is a pre-existing infrastructure issue.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Mobile: add keyboard toolbar for page editor

Toolbar with + (block type) and dismiss keyboard buttons appears
above the keyboard when editing. Uses Keyboard events instead of
InputAccessoryView for Expo compatibility.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Mobile: update README with page editing and current feature set

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 13:20:32 +01:00
Ylber Gashi
7d44085a8e Improve mobile reliability and rendering (#340) 2026-03-14 11:45:14 +01:00
Ylber Gashi
a55c30be61 Mobile: fix default tab navigation to home on app launch (#338)
Remove unnecessary conditional check that prevented navigation to home when app first loads. Expo Router defaults to the first alphabetically-ordered tab group (chats) before the navigation effect fires. Since the effect is guarded by hasNavigated, we can unconditionally navigate to home when the user has workspaces.

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-14 09:48:24 +01:00
Ylber Gashi
4978592dc1 Improve mobile startup and theme reliability (#339) 2026-03-14 00:56:18 +01:00
Ylber Gashi
ef91f3ad03 Harden Expo mobile startup and UX (#337) 2026-03-13 22:57:28 +01:00
Ylber Gashi
2d629b54f2 Mobile: eliminate duplication, fix bugs, and improve consistency (#336)
This commit consolidates 4 phases of polish to reduce 811 lines of duplicated code and fix critical bugs:

Phase 1: Extract utilities
- Create src/lib/radar-utils.ts for unread count computation
- Create src/lib/node-utils.ts for type-safe node name extraction and node type labels
- Create src/lib/navigation-utils.ts for shared node navigation logic
- Relocate src/components/nodes/folder-add-sheet.tsx → src/hooks/use-folder-file-upload.ts (was misnamed)

Phase 2: Extract ConversationScreen
- Create src/components/conversation/conversation-screen.tsx (shared chat/channel messaging UI)
- Simplify [chatId].tsx and [channelId].tsx to thin wrappers (~40 lines each)
- Fix unread count race condition: sequence node.interaction mutations with async/await

Phase 3: Extract NodeChildList
- Create src/components/nodes/node-child-list.tsx (shared space/folder child node list)
- Simplify space/[spaceId].tsx and folder/[folderId].tsx (100+ fewer lines each)
- Consolidate child node rendering, navigation, and long-press actions

Phase 4: Fix hardcoded paddingTop
- Replace all hardcoded paddingTop: 56/60 with useSafeAreaInsets().top + 8
- Apply to 18+ screens (home, spaces, chats, settings, pages, files, etc.)

Bugs fixed:
- Avatar picker now validates file existence (useEffect + appService.fs.exists)
- Avatar initials use muted color palette matching UserAvatar
- Home screen "Spaces" button now shortcuts to first space (or list if none)
- About screen now shows correct account server (not servers[0])
- Splash screen resizeMode "cover" eliminates black bars, backgroundColor matches image

Other improvements:
- Server URL placeholder updated to "http://your-server.com/config"
- Metro bundler now recognizes .db asset extensions (emoji/icon SQLite files)
- README updated to document Metro mocking and asset handling
- All screens now properly account for notch/dynamic island (safe area)

Impact: -811 lines, +182 insertions = 629 lines net reduction with zero feature changes

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-11 23:52:24 +01:00
Ylber Gashi
450cbaa0ff Mobile: refactor for code quality, type safety, and performance (#335)
Architectural improvements:
- Extract reusable BottomSheet component to eliminate duplicate Modal boilerplate from 6+ components
- Create useNodeQuery<T> convenience hook for single-node fetches with proper type safety
- Extract shared utilities (constants, node display names, radar data computation)
- Remove 374 lines of duplicated code through component and utility extraction

Type safety enhancements:
- Add generic type parameter to useNodeListQuery<T extends LocalNode>
- Eliminate all remaining 'as LocalXNode' type casts throughout mobile app
- Fix useNodeListQuery useEffect dependency bug (remove filters from deps)
- Type-safe node fetches in screens (chat, space, channel, page, file, folder)

Code organization:
- New files: bottom-sheet.tsx, use-node-query.ts, use-folder-file-upload.ts, constants.ts, node-utils.ts, radar-utils.ts
- Consolidate MOBILE_WINDOW_ID constant to single source
- Extract unread count logic into reusable radar utilities
- Move folder file upload hook to hooks directory

Performance & reliability:
- Reuse BottomSheet component (227 lines → ~70 per consumer)
- Extract unread computation utilities (used by 4+ locations)
- Improve hook memoization and dependencies
- Remove message extraction duplication

Test results: App builds and runs on iOS Simulator, all screens functional with proper data fetching.

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-11 00:03:57 +01:00
Ylber Gashi
3bb6407f3e Merge pull request #334 from colanode/ylber/mobile-readme
Mobile: document architecture and setup
2026-03-10 23:00:35 +01:00
Ylber Gashi
81759647b3 Mobile: document app architecture and setup in README
Add comprehensive documentation covering overview, implemented features, setup instructions, and architecture details. Includes routing structure, local-first data flow, key layers, and Metro bundler mocking configuration.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-10 22:59:53 +01:00
Ylber Gashi
203a04b561 Mobile: clean up prebuild artifacts, fix type safety, and improve reliability
- Remove committed ios/android prebuild dirs (CNG generates these on demand)
- Add root-level /ios/ and /android/ to .gitignore to prevent stray prebuilds
- Extract message text utils to shared module (message-utils.ts)
- Fix sync-service bind targets (nodeInteractions/nodeReactions were bound to wrong service)
- Fix node-counters-service lock key (use parent_id instead of node id)
- Replace `any` casts with proper types (TextStyle, error handling, file info)
- Propagate SQLite query errors instead of silently swallowing them
- Skip re-copying assets that already exist on disk
- Memoize message list grouping to avoid unnecessary recomputation
- Show spinner instead of "Loading..." in emoji picker empty state
2026-03-10 22:52:44 +01:00
Ylber Gashi
0a35eef69b Mobile: fix chat navigation, unread counts, logout crash, and login errors
- Fix cross-tab chat navigation from Home using Link withAnchor + unstable_settings
  so back button goes to chat list instead of home screen
- Fix unread count not clearing: add clearCountersForNode for chat/channel nodes
  in both mutation handler and sync paths
- Fix unread counts persisting after re-login by checking parent interaction
  seen state during message counter increment
- Fix logout crash: await database.destroy() and stop services before closing DB
- Fix login error on re-login by cleaning up stale account data in handleLoginSuccess
- Switch ChatListItem to useNodeListQuery for reactive message preview updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 19:49:30 +01:00
Ylber Gashi
298f3cc173 Rewrite mobile app with Expo Router and React Native
Migrate from Vite/web-based setup to native React Native with Expo Router.
Includes auth flows, chat/spaces/settings screens, CRDT sync, file upload,
workspace switching, emoji picker, message reactions, and iOS/Android projects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:07:20 +01:00
Ylber Gashi
ed5327a354 Add path-based PR tests for server and web (#328)
* Add path-based PR tests for server and web
* Use Turbo affected tests in PR CI
2026-02-21 16:25:50 +01:00
Hakan Shehu
1259f7bd91 Update packages (#322) v0.4.6 2026-02-09 15:42:21 +01:00
Ylber Gashi
075c835286 Web: add test setup and first tests (#313)
* test(server): add vitest harness and initial integration tests
* add web test setup and initial tests
2026-02-09 15:24:22 +01:00
Hakan Shehu
d88ef72f37 Send emails on workspace invitation (#321) 2026-02-09 15:23:43 +01:00
Hakan Shehu
d8a3df9e06 Add app info route and page (#320) 2026-02-09 13:20:34 +01:00
Hakan Shehu
a04cae9add Add nginx configuration for web routes (spa mode) (#319) 2026-02-09 11:14:06 +01:00
Hakan Shehu
60ccfe7940 Fix internal link handling in editor (#315) v0.4.5 2026-02-02 10:01:43 +01:00
Hakan Shehu
6d40a2b574 Fix undo & redo for documents (#314) 2026-02-02 09:38:00 +01:00
Hakan Shehu
5ea69ba06d Update packages (#311) v0.4.4 2026-01-30 17:38:34 +01:00
Ylber Gashi
6590a0db0f Add AI agent documentation (CLAUDE.md & AGENTS.md) (#295)
* add contributing md and coding agents md docs

* remove contributing md from this branch

* minor updates

* resolve PR comments and add tests instructions
2026-01-30 17:12:17 +01:00
Hakan Shehu
4217eedad5 Fix workspace update (#310) 2026-01-30 17:12:02 +01:00
Hakan Shehu
0a6b7b7714 Fix workspaces routing and redirects (#309)
* fix initial redirect check for last used workspace
* fix workspace and account redirect
2026-01-30 16:54:34 +01:00
Ylber Gashi
3e1070f3a6 test(server): add vitest harness and initial integration tests (#302) 2026-01-19 22:17:32 +01:00
Ylber Gashi
cc72b3e2a1 Add contributing and security docs (#300) 2026-01-19 10:47:26 +01:00
Hakan Shehu
6a9255dfed Fix cleanup on account logout (#296) v0.4.3 2026-01-15 23:40:07 +01:00
Hakan Shehu
22d7d4bf17 Fix workspace create account context (#294) 2026-01-15 22:38:22 +01:00