Fixed issue where users could only see 20 transactions at a time despite having more transactions in the selected time period.
Changes:
- **Removed pagination controls**: Eliminated prev/next page buttons and page counter
- **Load all transactions**: Set limit to 1000 to fetch all transactions for the selected time period
- **Natural scrolling**: Users can now scroll through all their transactions
- **Improved fuzzy search**: Search now works across ALL transactions, not just the current page
- **Simplified UI**: Cleaner interface without pagination complexity
- **Updated transaction count**: Now shows total count instead of "X-Y of Z"
Previous behavior:
- Limited to 20 transactions per page
- Required manual pagination to see more
- Fuzzy search only searched current page (20 transactions)
New behavior:
- Loads up to 1000 transactions at once
- Single scrollable list
- Fuzzy search works across all loaded transactions
- Lightweight (text-only data)
🐢 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Dramatically reduced wasted space and improved mobile UX by:
- **Compact header**: Moved refresh button inline with title, similar to NostrFeed
- **Compact controls**: All day filter buttons now on one row with Calendar icon
- **Removed nested cards**: Eliminated Card wrapper around transactions list
- **Full-width layout**: Transactions now use full screen width on mobile (border-b) and rounded cards on desktop (md:border md:rounded-lg)
- **Consistent padding**: Uses px-0 on mobile, px-4 on desktop, matching NostrFeed patterns
- **Reduced vertical space**: Compacted header section to about half the original height
- **Cleaner imports**: Removed unused Card, CardContent, CardHeader, CardTitle, CardDescription, and Separator components
Layout now follows NostrFeed's mobile-optimized patterns with max-w-3xl container and responsive spacing.
Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Created TransactionsPage with mobile-optimized layout
- Card-based transaction items with status indicators
- Fuzzy search by description, payee, reference, username, and tags
- Day filter options (5, 30, 60, 90 days)
- Pagination support
- Responsive design for mobile and desktop
- Added getUserTransactions API method to ExpensesAPI
- Supports filtering by days, user ID, and account type
- Returns paginated transaction data
- Updated AddExpense component with success confirmation
- Shows success message in same dialog after submission
- Provides option to navigate to transactions page
- Clean single-dialog approach
- Added "My Transactions" link to navbar menu
- Added Transaction and TransactionListResponse types
- Added permission management types and API methods (grantPermission, listPermissions, revokePermission)
- Installed alert-dialog component for UI consistency
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adds support for the new exclude_virtual parameter added to the Castle backend API.
Changes:
- Added excludeVirtual parameter to getAccounts() (defaults to true)
- Added excludeVirtual parameter to getAccountHierarchy() (defaults to true)
- Both methods now pass the parameter to the backend API
This ensures virtual parent accounts are excluded from user views by default,
while still allowing permission inheritance to work correctly on the backend.
The default value of true means existing code automatically benefits from
the change without modification - virtual accounts won't appear in user
account selectors.
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Updates the description of the `amount` and `currency` fields in the `ExpenseEntryRequest` interface to clarify that the amount is in the specified currency (or satoshis if currency is None).
Updates the description placeholder in the AddExpense component to provide more specific and helpful examples for users.
This aims to guide users in providing more detailed and relevant descriptions of their expenses, improving the overall expense tracking experience.
Improves the visual presentation of the selected account in the add expense form by using a badge.
This makes the selected account more prominent and provides a clearer distinction from other text elements.
Improves the expense tracking component by fetching user information to determine equity eligibility.
This allows displaying the "Convert to equity" checkbox only to eligible users, enhancing the user experience and ensuring accurate expense categorization.
Also includes error handling to prevent the form from breaking if user information cannot be loaded.
Ensures that the account selector only displays accounts
that the user has permissions for.
This change modifies the `ExpensesAPI` to include a
`filterByUser` parameter when fetching accounts, which is
then passed to the backend to retrieve only authorized
accounts. A log statement was added to confirm proper
filtering.
Enhances the Add Expense dialog's layout for better usability.
Reduces the maximum height of the dialog, adjusts padding and margins,
and ensures scrollable content has a minimum height for a more consistent
user experience.
Refactors the AddExpense component to utilize the Dialog component
from the UI library. This provides a more structured and accessible
modal for adding expenses, and includes a header with title and description.
It also improves the layout using flexbox for better content management
and scrollability.
Ensures the expense form defaults to the LNbits instance's configured currency.
This change retrieves the default currency from the LNbits API and sets it as the initial value in the expense form. If no default is configured, it falls back to the first available currency or EUR.
Allows users to select a currency when adding an expense.
Fetches available currencies from the backend and displays them
in a dropdown menu, defaulting to EUR if the fetch fails.
The expense submission process now includes the selected currency.
Updates the expense input fields to accept and display amounts in Euros instead of satoshis.
This change ensures that the amount field is configured to handle decimal values with a minimum value of €0.01.
Implements components for granting and revoking account permissions.
This introduces a `GrantPermissionDialog` for assigning access rights to users,
and a `PermissionManager` component to list and revoke existing permissions.
The UI provides options to view permissions grouped by user or by account.
Changes the "Account from equity" label and description
to "Convert to equity contribution" for clarity.
The updated description explains that instead of cash
reimbursement, the expense will increase the user's
equity stake.
Updates expense submission to require a user wallet.
Retrieves wallet information from the authentication context
and includes it in the expense submission request to the backend.
This ensures that expenses are correctly associated with the user's
wallet, enabling accurate tracking and management of expenses.
Also adds error handling and user feedback.
Adds a new module for tracking user expenses.
The module includes:
- Configuration settings for the LNbits API endpoint and timeouts.
- An ExpensesAPI service for fetching accounts and submitting expense entries.
- A UI component for adding expenses, including account selection and form input.
- Dependency injection for the ExpensesAPI service.
This allows users to submit expense entries with account selection and reference data, which will be linked to their wallet.
Introduces a dynamic quick action system, allowing modules to register actions that appear in a floating action button menu.
This provides a flexible way for modules to extend the application's functionality with common tasks like composing notes or initiating payments.
Refines project documentation to reflect recent architectural changes and coding standards.
Adds detailed explanations of the BaseService pattern, module structure, and JavaScript best practices to enhance developer understanding and consistency.
Clarifies CSS styling guidelines, emphasizing semantic classes for theme-aware styling.
Includes critical bug prevention techniques related to JavaScript falsy values and correct usage of the nullish coalescing operator.
Updates build configuration details, environment variable requirements, and mobile browser workaround strategies.
Refines the presentation of scheduled events by adjusting spacing and text displayed when there are no tasks. This enhances visual clarity and provides a more user-friendly experience.
Moves the "no posts" message to only display when there are no posts and no scheduled events.
Also, ensures "end of feed" message is displayed only when there are posts to show.
Implements date navigation for scheduled events, allowing users to view events for different days.
This change replaces the static "Today's Events" section with a dynamic date selector.
It introduces buttons for navigating to the previous and next days, as well as a "Today" button to return to the current date.
A date display shows the selected date, and a message indicates when there are no scheduled events for a given day.
Ensures that one-time events exclude recurring events, preventing duplicate entries.
This resolves an issue where recurring events were incorrectly included in the list of one-time events, leading to events being displayed multiple times.
Extends scheduled event completion to support recurring events.
The changes introduce the concept of an "occurrence" for recurring events,
allowing users to mark individual instances of a recurring event as complete.
This involves:
- Adding recurrence information to the ScheduledEvent model.
- Modifying completion logic to handle recurring events with daily/weekly frequencies
- Updating UI to display recurrence information and mark individual occurrences as complete.
Improves scheduled event retrieval by filtering events
based on user participation and sorting them by start time.
This ensures that users only see events they are participating
in or events that are open to the entire community.
Updates the completed badge to display the name of the user who marked the event as complete.
This provides better context and clarity regarding who triggered the completion status.
Ensures users only see scheduled events they are participating in or events that are open to everyone.
This change filters the list of today's scheduled events based on the current user's participation.
It only displays events where the user is listed as a participant or events that do not have any participants specified.
Migrates ScheduledEventCard to use the Collapsible component from the UI library.
This simplifies the component's structure and improves accessibility by leveraging the built-in features of the Collapsible component.
Removes custom logic for managing the expanded/collapsed state.
Changes the `allCompletions` computed property to return an array instead of a Map.
This improves reactivity in the component that uses it, as Vue can more efficiently track changes in an array.
Also simplifies the pubkey extraction process.
Improves the Scheduled Event Card component by adding an expandable view.
This change introduces a collapsed view that shows the event time and title, and an expanded view which displays all event details. This allows users to quickly scan the scheduled events and expand those they are interested in.
Enables marking scheduled events as complete based on a new "event-type" tag.
This change introduces the concept of "completable" events, specifically for events of type "task". It modifies the ScheduledEventCard component to:
- Display completion information only for completable events
- Show the "Mark Complete" button only for completable events that are not yet completed
- Adjust the opacity and strikethrough styling based on the event's completable and completed status.
The ScheduledEventService is updated to extract the event type from the "event-type" tag.
Ensures profiles are fetched for authors and completers of scheduled events,
improving user experience by displaying relevant user information.
This is achieved by watching for scheduled events and completions, then
fetching profiles for any new pubkeys encountered.
Improves user experience by adding a confirmation dialog
before marking a scheduled event as complete. This helps
prevent accidental completion of events.
Implements a feature to mark scheduled events as complete, replacing the checkbox with a button for improved UX.
This commit enhances the Scheduled Events functionality by allowing users to mark events as complete. It also includes:
- Replaces the checkbox with a "Mark Complete" button for better usability.
- Adds logging for debugging purposes during event completion toggling.
- Routes completion events (kind 31925) to the ScheduledEventService.
- Optimistically updates the local state after publishing completion events.
Implements NIP-52 scheduled events, allowing users to view and interact with calendar events.
A new `ScheduledEventService` is introduced to manage fetching, storing, and completing scheduled events. A new `ScheduledEventCard` component is introduced for displaying the scheduled events.
Ensures that necessary peer dependencies are correctly installed
when the project is set up, preventing potential runtime errors or
unexpected behavior due to missing dependencies.
Replaces the demo login page with a dedicated login and registration component.
This allows users to create accounts and log in, enabling authentication features.
Simplify Login, remove registration for now
Adds a login page with username and password fields.
Includes input validation, loading state, error handling,
and a success message after successful login.
Registration has been temporarily disabled.
Key changes:
- Add notification store with path-based wildcard support (chat/*, chat/{pubkey}, *)
- Remove UnreadMessageData interface and processedMessageIds Set tracking
- Implement timestamp-based "seen at" logic with wildcard matching
- Add markAllChatsAsRead() for batch operations
- Integrate ChatNotificationConfig for module configuration
- Create useNotifications composable for easy notification access
Benefits:
- Simpler architecture (removed processedMessageIds complexity)
- Flexible wildcard-based "mark as read" operations
- Future-proof for Primal-style backend sync
- User-scoped storage via StorageService
- Clean separation of concerns
refactor: enhance chat service with activity tracking and sorting
- Updated the ChatService to track lastSent, lastReceived, and lastChecked timestamps for peers, improving message handling and user experience.
- Implemented sorting of peers by last activity to prioritize recent conversations.
- Adjusted message handling to update peer activity based on message direction.
- Ensured updated peer data is saved to storage after modifications.
These changes streamline chat interactions and enhance the overall functionality of the chat service.
refactor: improve ChatService and notification store initialization
- Updated ChatService to ensure the notification store is initialized only after user authentication, preventing potential errors.
- Introduced a new method to safely access the notification store, enhancing error handling.
- Enhanced peer activity tracking by calculating last activity based on actual message timestamps, improving sorting and user experience.
- Added debounced saving of notification state to storage, optimizing performance and reducing unnecessary writes.
- Improved logging for better debugging and visibility into notification handling processes.
These changes enhance the reliability and efficiency of the chat service and notification management.
refactor: clean up logging in ChatService and notification store
- Removed unnecessary console logs from ChatService to streamline the code and improve performance.
- Simplified the initialization process of the notification store by eliminating redundant logging statements.
- Enhanced readability and maintainability of the code by focusing on essential operations without excessive debug output.
These changes contribute to a cleaner codebase and improved performance in chat service operations.
FIX BUILD ERRORS
refactor: update chat module notification configuration
- Refactored the notification settings in the chat module to use a nested structure, enhancing clarity and organization.
- Introduced `wildcardSupport` to the notification configuration, allowing for more flexible notification handling.
- Maintained existing functionality while improving the overall configuration structure.
These changes contribute to a more maintainable and extensible chat module configuration.
refactor: optimize ChatComponent and ChatService for improved performance
- Removed unnecessary sorting of peers in ChatComponent, leveraging the existing order provided by the chat service.
- Updated the useFuzzySearch composable to directly utilize the sorted peers, enhancing search efficiency.
- Cleaned up logging in ChatService by removing redundant console statements, streamlining the codebase.
- Added critical checks to prevent the current user from being included in peer interactions, improving user experience and functionality.
These changes contribute to a more efficient and maintainable chat module.
refactor: simplify message publishing in ChatService
- Removed unnecessary variable assignment in the message publishing process, directly awaiting the relayHub.publishEvent call.
- This change streamlines the code and enhances readability without altering functionality.
These modifications contribute to a cleaner and more efficient chat service implementation.