Compare commits

...

5 Commits

Author SHA1 Message Date
b6349bf173 feat(editor): add advanced rich text features and update deployment configuration
Some checks failed
Deploy to Coolify / deploy (push) Failing after 7m5s
- Enhance lexical editor with formatting options (strikethrough, inline code, subscript, superscript), lists (unordered, ordered, checklist), tables, alignment, indentation, blockquotes, horizontal rules, uploads, and relationships
- Update Dockerfile for improved build process, including .npmrc support, pnpm config, telemetry disable, and production optimizations
- Modify CI workflow to deploy only, removing local build steps and updating webhook trigger
- Add .dockerignore file and deployment documentation for Docker build and push workflow
- Configure Next.js for standalone output in next.config.js

BREAKING CHANGE: CI workflow now requires local Docker builds before pushing code, as automated builds have been removed.
2025-12-03 14:59:13 +08:00
794e2144e8 ci: Update deployment trigger branch from main to master.
Some checks failed
Build and Deploy / build-and-deploy (push) Failing after 1m36s
2025-12-02 23:04:16 +08:00
7e4270a36e feat(ci): add CI/CD workflow and spec workflow setup
- Add Gitea workflow for build and deploy
- Add spec workflow configuration and templates
- Update package lock file for dependencies
2025-12-02 17:49:08 +08:00
58ea6a0e11 update favicon 2025-10-18 13:14:35 +08:00
fc1651d849 upadate brand 2025-10-18 13:05:09 +08:00
24 changed files with 3467 additions and 40 deletions

View File

@@ -0,0 +1,112 @@
---
description: Build Docker image and push to Docker Hub for Coolify deployment
---
# Docker Build and Push Workflow
This workflow builds a Docker image locally and pushes it to Docker Hub so it can be deployed to Coolify.
## Prerequisites
1. **Docker Hub Account**: Make sure you have a Docker Hub account
2. **Docker Hub Login**: Log in to Docker Hub from your terminal
```bash
docker login
```
Enter your Docker Hub username and password when prompted.
## Workflow Steps
### 1. Build the Docker Image
Build your Docker image with a tag that includes your Docker Hub username:
```bash
docker build -t YOUR_DOCKERHUB_USERNAME/website-ricenoodletw-cms:latest .
```
Replace `YOUR_DOCKERHUB_USERNAME` with your actual Docker Hub username.
You can also add a specific version tag:
```bash
docker build -t YOUR_DOCKERHUB_USERNAME/website-ricenoodletw-cms:v1.0.0 .
```
### 2. (Optional) Test the Image Locally
Before pushing, you can test the image locally:
```bash
docker run -p 3000:3000 YOUR_DOCKERHUB_USERNAME/website-ricenoodletw-cms:latest
```
### 3. Push to Docker Hub
Push the image to Docker Hub:
```bash
docker push YOUR_DOCKERHUB_USERNAME/website-ricenoodletw-cms:latest
```
If you tagged a specific version, push that too:
```bash
docker push YOUR_DOCKERHUB_USERNAME/website-ricenoodletw-cms:v1.0.0
```
### 4. Deploy to Coolify
In your Coolify dashboard:
1. Create a new service or edit your existing service
2. Select **Docker Image** as the source
3. Enter your image name: `YOUR_DOCKERHUB_USERNAME/website-ricenoodletw-cms:latest`
4. Configure environment variables if needed
5. Deploy
Coolify will pull the image from Docker Hub and deploy it.
## Automated Deployment with Gitea Actions
Since building happens locally, the Gitea workflow only triggers Coolify deployment. Here's a sample workflow for `.gitea/workflows/deploy.yaml`:
```yaml
name: Deploy to Coolify
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Trigger Coolify Deployment
run: |
curl -X POST "${{ secrets.COOLIFY_WEBHOOK_URL }}"
```
### Setup Instructions:
1. **Get Coolify Webhook URL**:
- In Coolify, go to your service settings
- Find the "Webhooks" section
- Copy the webhook URL
2. **Add to Gitea Secrets**:
- Go to your repository in Gitea
- Navigate to Settings → Secrets
- Add `COOLIFY_WEBHOOK_URL` with the webhook URL from Coolify
### Workflow:
1. **Build and push locally** (steps 1-3 above)
2. **Push code to Gitea** - This triggers the Gitea workflow
3. **Gitea notifies Coolify** - Coolify pulls the latest image from Docker Hub
4. **Coolify redeploys** - Your service is updated with the new image
**Note**: Make sure your Coolify service is configured to use the Docker image from Docker Hub (`YOUR_DOCKERHUB_USERNAME/website-ricenoodletw-cms:latest`).

12
.dockerignore Normal file
View File

@@ -0,0 +1,12 @@
node_modules
.next
.git
.gitignore
README.md
.env*.local
.vercel
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.DS_Store

View File

@@ -0,0 +1,15 @@
name: Deploy to Coolify
run-name: ${{ gitea.actor }} is deploying to Coolify 🚀
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Trigger Coolify Deployment
run: |
curl -X POST "${{ secrets.COOLIFY_WEBHOOK_URL }}"

View File

@@ -0,0 +1,72 @@
# Spec Workflow MCP Server Configuration File
# ============================================
#
# This is an example configuration file for the Spec Workflow MCP Server.
# Copy this file to 'config.toml' in the same directory to use it.
#
# Configuration Precedence:
# 1. Command-line arguments (highest priority)
# 2. Config file settings
# 3. Built-in defaults (lowest priority)
#
# All settings are optional. Uncomment and modify as needed.
# Please note that not all MCP clients will support loading this config file due to the nature of where they are running from.
# Project directory path
# The root directory of your project where spec files are located.
# Note: You may have to use double slashes (\\) instead of single slashes (/) on Windows or for certain clients.
# Supports tilde (~) expansion for home directory.
# Default: current working directory
# projectDir = "."
# projectDir = "~/my-project"
# projectDir = "/absolute/path/to/project"
# Dashboard port
# The port number for the web dashboard.
# Must be between 1024 and 65535.
# Default: ephemeral port (automatically assigned)
# port = 3000
# Auto-start dashboard
# Automatically launch the dashboard when the MCP server starts.
# The dashboard will open in your default browser.
# Default: false
# autoStartDashboard = false
# Dashboard-only mode
# Run only the web dashboard without the MCP server.
# Useful for standalone dashboard usage.
# Default: false
# dashboardOnly = false
# Language
# Set the interface language for internationalization (i18n).
# Available languages depend on your installation.
# Common values: "en" (English), "ja" (Japanese), etc.
# Default: system language or "en"
# lang = "en"
# Example configurations:
# =====================
# Example 1: Development setup with auto-started dashboard
# ----------------------------------------------------------
# projectDir = "~/dev/my-project"
# autoStartDashboard = true
# port = 3456
# Example 2: Production MCP server without dashboard
# ---------------------------------------------------
# projectDir = "/var/projects/production"
# autoStartDashboard = false
# Example 3: Dashboard-only mode for viewing specs
# -------------------------------------------------
# projectDir = "."
# dashboardOnly = true
# port = 8080
# Example 4: Japanese language interface
# ---------------------------------------
# lang = "ja"
# autoStartDashboard = true

View File

@@ -0,0 +1,96 @@
# Design Document
## Overview
[High-level description of the feature and its place in the overall system]
## Steering Document Alignment
### Technical Standards (tech.md)
[How the design follows documented technical patterns and standards]
### Project Structure (structure.md)
[How the implementation will follow project organization conventions]
## Code Reuse Analysis
[What existing code will be leveraged, extended, or integrated with this feature]
### Existing Components to Leverage
- **[Component/Utility Name]**: [How it will be used]
- **[Service/Helper Name]**: [How it will be extended]
### Integration Points
- **[Existing System/API]**: [How the new feature will integrate]
- **[Database/Storage]**: [How data will connect to existing schemas]
## Architecture
[Describe the overall architecture and design patterns used]
### Modular Design Principles
- **Single File Responsibility**: Each file should handle one specific concern or domain
- **Component Isolation**: Create small, focused components rather than large monolithic files
- **Service Layer Separation**: Separate data access, business logic, and presentation layers
- **Utility Modularity**: Break utilities into focused, single-purpose modules
```mermaid
graph TD
A[Component A] --> B[Component B]
B --> C[Component C]
```
## Components and Interfaces
### Component 1
- **Purpose:** [What this component does]
- **Interfaces:** [Public methods/APIs]
- **Dependencies:** [What it depends on]
- **Reuses:** [Existing components/utilities it builds upon]
### Component 2
- **Purpose:** [What this component does]
- **Interfaces:** [Public methods/APIs]
- **Dependencies:** [What it depends on]
- **Reuses:** [Existing components/utilities it builds upon]
## Data Models
### Model 1
```
[Define the structure of Model1 in your language]
- id: [unique identifier type]
- name: [string/text type]
- [Additional properties as needed]
```
### Model 2
```
[Define the structure of Model2 in your language]
- id: [unique identifier type]
- [Additional properties as needed]
```
## Error Handling
### Error Scenarios
1. **Scenario 1:** [Description]
- **Handling:** [How to handle]
- **User Impact:** [What user sees]
2. **Scenario 2:** [Description]
- **Handling:** [How to handle]
- **User Impact:** [What user sees]
## Testing Strategy
### Unit Testing
- [Unit testing approach]
- [Key components to test]
### Integration Testing
- [Integration testing approach]
- [Key flows to test]
### End-to-End Testing
- [E2E testing approach]
- [User scenarios to test]

View File

@@ -0,0 +1,51 @@
# Product Overview
## Product Purpose
[Describe the core purpose of this product/project. What problem does it solve?]
## Target Users
[Who are the primary users of this product? What are their needs and pain points?]
## Key Features
[List the main features that deliver value to users]
1. **Feature 1**: [Description]
2. **Feature 2**: [Description]
3. **Feature 3**: [Description]
## Business Objectives
[What are the business goals this product aims to achieve?]
- [Objective 1]
- [Objective 2]
- [Objective 3]
## Success Metrics
[How will we measure the success of this product?]
- [Metric 1]: [Target]
- [Metric 2]: [Target]
- [Metric 3]: [Target]
## Product Principles
[Core principles that guide product decisions]
1. **[Principle 1]**: [Explanation]
2. **[Principle 2]**: [Explanation]
3. **[Principle 3]**: [Explanation]
## Monitoring & Visibility (if applicable)
[How do users track progress and monitor the system?]
- **Dashboard Type**: [e.g., Web-based, CLI, Desktop app]
- **Real-time Updates**: [e.g., WebSocket, polling, push notifications]
- **Key Metrics Displayed**: [What information is most important to surface]
- **Sharing Capabilities**: [e.g., read-only links, exports, reports]
## Future Vision
[Where do we see this product evolving in the future?]
### Potential Enhancements
- **Remote Access**: [e.g., Tunnel features for sharing dashboards with stakeholders]
- **Analytics**: [e.g., Historical trends, performance metrics]
- **Collaboration**: [e.g., Multi-user support, commenting]

View File

@@ -0,0 +1,50 @@
# Requirements Document
## Introduction
[Provide a brief overview of the feature, its purpose, and its value to users]
## Alignment with Product Vision
[Explain how this feature supports the goals outlined in product.md]
## Requirements
### Requirement 1
**User Story:** As a [role], I want [feature], so that [benefit]
#### Acceptance Criteria
1. WHEN [event] THEN [system] SHALL [response]
2. IF [precondition] THEN [system] SHALL [response]
3. WHEN [event] AND [condition] THEN [system] SHALL [response]
### Requirement 2
**User Story:** As a [role], I want [feature], so that [benefit]
#### Acceptance Criteria
1. WHEN [event] THEN [system] SHALL [response]
2. IF [precondition] THEN [system] SHALL [response]
## Non-Functional Requirements
### Code Architecture and Modularity
- **Single Responsibility Principle**: Each file should have a single, well-defined purpose
- **Modular Design**: Components, utilities, and services should be isolated and reusable
- **Dependency Management**: Minimize interdependencies between modules
- **Clear Interfaces**: Define clean contracts between components and layers
### Performance
- [Performance requirements]
### Security
- [Security requirements]
### Reliability
- [Reliability requirements]
### Usability
- [Usability requirements]

View File

@@ -0,0 +1,145 @@
# Project Structure
## Directory Organization
```
[Define your project's directory structure. Examples below - adapt to your project type]
Example for a library/package:
project-root/
├── src/ # Source code
├── tests/ # Test files
├── docs/ # Documentation
├── examples/ # Usage examples
└── [build/dist/out] # Build output
Example for an application:
project-root/
├── [src/app/lib] # Main source code
├── [assets/resources] # Static resources
├── [config/settings] # Configuration
├── [scripts/tools] # Build/utility scripts
└── [tests/spec] # Test files
Common patterns:
- Group by feature/module
- Group by layer (UI, business logic, data)
- Group by type (models, controllers, views)
- Flat structure for simple projects
```
## Naming Conventions
### Files
- **Components/Modules**: [e.g., `PascalCase`, `snake_case`, `kebab-case`]
- **Services/Handlers**: [e.g., `UserService`, `user_service`, `user-service`]
- **Utilities/Helpers**: [e.g., `dateUtils`, `date_utils`, `date-utils`]
- **Tests**: [e.g., `[filename]_test`, `[filename].test`, `[filename]Test`]
### Code
- **Classes/Types**: [e.g., `PascalCase`, `CamelCase`, `snake_case`]
- **Functions/Methods**: [e.g., `camelCase`, `snake_case`, `PascalCase`]
- **Constants**: [e.g., `UPPER_SNAKE_CASE`, `SCREAMING_CASE`, `PascalCase`]
- **Variables**: [e.g., `camelCase`, `snake_case`, `lowercase`]
## Import Patterns
### Import Order
1. External dependencies
2. Internal modules
3. Relative imports
4. Style imports
### Module/Package Organization
```
[Describe your project's import/include patterns]
Examples:
- Absolute imports from project root
- Relative imports within modules
- Package/namespace organization
- Dependency management approach
```
## Code Structure Patterns
[Define common patterns for organizing code within files. Below are examples - choose what applies to your project]
### Module/Class Organization
```
Example patterns:
1. Imports/includes/dependencies
2. Constants and configuration
3. Type/interface definitions
4. Main implementation
5. Helper/utility functions
6. Exports/public API
```
### Function/Method Organization
```
Example patterns:
- Input validation first
- Core logic in the middle
- Error handling throughout
- Clear return points
```
### File Organization Principles
```
Choose what works for your project:
- One class/module per file
- Related functionality grouped together
- Public API at the top/bottom
- Implementation details hidden
```
## Code Organization Principles
1. **Single Responsibility**: Each file should have one clear purpose
2. **Modularity**: Code should be organized into reusable modules
3. **Testability**: Structure code to be easily testable
4. **Consistency**: Follow patterns established in the codebase
## Module Boundaries
[Define how different parts of your project interact and maintain separation of concerns]
Examples of boundary patterns:
- **Core vs Plugins**: Core functionality vs extensible plugins
- **Public API vs Internal**: What's exposed vs implementation details
- **Platform-specific vs Cross-platform**: OS-specific code isolation
- **Stable vs Experimental**: Production code vs experimental features
- **Dependencies direction**: Which modules can depend on which
## Code Size Guidelines
[Define your project's guidelines for file and function sizes]
Suggested guidelines:
- **File size**: [Define maximum lines per file]
- **Function/Method size**: [Define maximum lines per function]
- **Class/Module complexity**: [Define complexity limits]
- **Nesting depth**: [Maximum nesting levels]
## Dashboard/Monitoring Structure (if applicable)
[How dashboard or monitoring components are organized]
### Example Structure:
```
src/
└── dashboard/ # Self-contained dashboard subsystem
├── server/ # Backend server components
├── client/ # Frontend assets
├── shared/ # Shared types/utilities
└── public/ # Static assets
```
### Separation of Concerns
- Dashboard isolated from core business logic
- Own CLI entry point for independent operation
- Minimal dependencies on main application
- Can be disabled without affecting core functionality
## Documentation Standards
- All public APIs must have documentation
- Complex logic should include inline comments
- README files for major modules
- Follow language-specific documentation conventions

View File

@@ -0,0 +1,139 @@
# Tasks Document
- [ ] 1. Create core interfaces in src/types/feature.ts
- File: src/types/feature.ts
- Define TypeScript interfaces for feature data structures
- Extend existing base interfaces from base.ts
- Purpose: Establish type safety for feature implementation
- _Leverage: src/types/base.ts_
- _Requirements: 1.1_
- _Prompt: Role: TypeScript Developer specializing in type systems and interfaces | Task: Create comprehensive TypeScript interfaces for the feature data structures following requirements 1.1, extending existing base interfaces from src/types/base.ts | Restrictions: Do not modify existing base interfaces, maintain backward compatibility, follow project naming conventions | Success: All interfaces compile without errors, proper inheritance from base types, full type coverage for feature requirements_
- [ ] 2. Create base model class in src/models/FeatureModel.ts
- File: src/models/FeatureModel.ts
- Implement base model extending BaseModel class
- Add validation methods using existing validation utilities
- Purpose: Provide data layer foundation for feature
- _Leverage: src/models/BaseModel.ts, src/utils/validation.ts_
- _Requirements: 2.1_
- _Prompt: Role: Backend Developer with expertise in Node.js and data modeling | Task: Create a base model class extending BaseModel and implementing validation following requirement 2.1, leveraging existing patterns from src/models/BaseModel.ts and src/utils/validation.ts | Restrictions: Must follow existing model patterns, do not bypass validation utilities, maintain consistent error handling | Success: Model extends BaseModel correctly, validation methods implemented and tested, follows project architecture patterns_
- [ ] 3. Add specific model methods to FeatureModel.ts
- File: src/models/FeatureModel.ts (continue from task 2)
- Implement create, update, delete methods
- Add relationship handling for foreign keys
- Purpose: Complete model functionality for CRUD operations
- _Leverage: src/models/BaseModel.ts_
- _Requirements: 2.2, 2.3_
- _Prompt: Role: Backend Developer with expertise in ORM and database operations | Task: Implement CRUD methods and relationship handling in FeatureModel.ts following requirements 2.2 and 2.3, extending patterns from src/models/BaseModel.ts | Restrictions: Must maintain transaction integrity, follow existing relationship patterns, do not duplicate base model functionality | Success: All CRUD operations work correctly, relationships are properly handled, database operations are atomic and efficient_
- [ ] 4. Create model unit tests in tests/models/FeatureModel.test.ts
- File: tests/models/FeatureModel.test.ts
- Write tests for model validation and CRUD methods
- Use existing test utilities and fixtures
- Purpose: Ensure model reliability and catch regressions
- _Leverage: tests/helpers/testUtils.ts, tests/fixtures/data.ts_
- _Requirements: 2.1, 2.2_
- _Prompt: Role: QA Engineer with expertise in unit testing and Jest/Mocha frameworks | Task: Create comprehensive unit tests for FeatureModel validation and CRUD methods covering requirements 2.1 and 2.2, using existing test utilities from tests/helpers/testUtils.ts and fixtures from tests/fixtures/data.ts | Restrictions: Must test both success and failure scenarios, do not test external dependencies directly, maintain test isolation | Success: All model methods are tested with good coverage, edge cases covered, tests run independently and consistently_
- [ ] 5. Create service interface in src/services/IFeatureService.ts
- File: src/services/IFeatureService.ts
- Define service contract with method signatures
- Extend base service interface patterns
- Purpose: Establish service layer contract for dependency injection
- _Leverage: src/services/IBaseService.ts_
- _Requirements: 3.1_
- _Prompt: Role: Software Architect specializing in service-oriented architecture and TypeScript interfaces | Task: Design service interface contract following requirement 3.1, extending base service patterns from src/services/IBaseService.ts for dependency injection | Restrictions: Must maintain interface segregation principle, do not expose internal implementation details, ensure contract compatibility with DI container | Success: Interface is well-defined with clear method signatures, extends base service appropriately, supports all required service operations_
- [ ] 6. Implement feature service in src/services/FeatureService.ts
- File: src/services/FeatureService.ts
- Create concrete service implementation using FeatureModel
- Add error handling with existing error utilities
- Purpose: Provide business logic layer for feature operations
- _Leverage: src/services/BaseService.ts, src/utils/errorHandler.ts, src/models/FeatureModel.ts_
- _Requirements: 3.2_
- _Prompt: Role: Backend Developer with expertise in service layer architecture and business logic | Task: Implement concrete FeatureService following requirement 3.2, using FeatureModel and extending BaseService patterns with proper error handling from src/utils/errorHandler.ts | Restrictions: Must implement interface contract exactly, do not bypass model validation, maintain separation of concerns from data layer | Success: Service implements all interface methods correctly, robust error handling implemented, business logic is well-encapsulated and testable_
- [ ] 7. Add service dependency injection in src/utils/di.ts
- File: src/utils/di.ts (modify existing)
- Register FeatureService in dependency injection container
- Configure service lifetime and dependencies
- Purpose: Enable service injection throughout application
- _Leverage: existing DI configuration in src/utils/di.ts_
- _Requirements: 3.1_
- _Prompt: Role: DevOps Engineer with expertise in dependency injection and IoC containers | Task: Register FeatureService in DI container following requirement 3.1, configuring appropriate lifetime and dependencies using existing patterns from src/utils/di.ts | Restrictions: Must follow existing DI container patterns, do not create circular dependencies, maintain service resolution efficiency | Success: FeatureService is properly registered and resolvable, dependencies are correctly configured, service lifetime is appropriate for use case_
- [ ] 8. Create service unit tests in tests/services/FeatureService.test.ts
- File: tests/services/FeatureService.test.ts
- Write tests for service methods with mocked dependencies
- Test error handling scenarios
- Purpose: Ensure service reliability and proper error handling
- _Leverage: tests/helpers/testUtils.ts, tests/mocks/modelMocks.ts_
- _Requirements: 3.2, 3.3_
- _Prompt: Role: QA Engineer with expertise in service testing and mocking frameworks | Task: Create comprehensive unit tests for FeatureService methods covering requirements 3.2 and 3.3, using mocked dependencies from tests/mocks/modelMocks.ts and test utilities | Restrictions: Must mock all external dependencies, test business logic in isolation, do not test framework code | Success: All service methods tested with proper mocking, error scenarios covered, tests verify business logic correctness and error handling_
- [ ] 4. Create API endpoints
- Design API structure
- _Leverage: src/api/baseApi.ts, src/utils/apiUtils.ts_
- _Requirements: 4.0_
- _Prompt: Role: API Architect specializing in RESTful design and Express.js | Task: Design comprehensive API structure following requirement 4.0, leveraging existing patterns from src/api/baseApi.ts and utilities from src/utils/apiUtils.ts | Restrictions: Must follow REST conventions, maintain API versioning compatibility, do not expose internal data structures directly | Success: API structure is well-designed and documented, follows existing patterns, supports all required operations with proper HTTP methods and status codes_
- [ ] 4.1 Set up routing and middleware
- Configure application routes
- Add authentication middleware
- Set up error handling middleware
- _Leverage: src/middleware/auth.ts, src/middleware/errorHandler.ts_
- _Requirements: 4.1_
- _Prompt: Role: Backend Developer with expertise in Express.js middleware and routing | Task: Configure application routes and middleware following requirement 4.1, integrating authentication from src/middleware/auth.ts and error handling from src/middleware/errorHandler.ts | Restrictions: Must maintain middleware order, do not bypass security middleware, ensure proper error propagation | Success: Routes are properly configured with correct middleware chain, authentication works correctly, errors are handled gracefully throughout the request lifecycle_
- [ ] 4.2 Implement CRUD endpoints
- Create API endpoints
- Add request validation
- Write API integration tests
- _Leverage: src/controllers/BaseController.ts, src/utils/validation.ts_
- _Requirements: 4.2, 4.3_
- _Prompt: Role: Full-stack Developer with expertise in API development and validation | Task: Implement CRUD endpoints following requirements 4.2 and 4.3, extending BaseController patterns and using validation utilities from src/utils/validation.ts | Restrictions: Must validate all inputs, follow existing controller patterns, ensure proper HTTP status codes and responses | Success: All CRUD operations work correctly, request validation prevents invalid data, integration tests pass and cover all endpoints_
- [ ] 5. Add frontend components
- Plan component architecture
- _Leverage: src/components/BaseComponent.tsx, src/styles/theme.ts_
- _Requirements: 5.0_
- _Prompt: Role: Frontend Architect with expertise in React component design and architecture | Task: Plan comprehensive component architecture following requirement 5.0, leveraging base patterns from src/components/BaseComponent.tsx and theme system from src/styles/theme.ts | Restrictions: Must follow existing component patterns, maintain design system consistency, ensure component reusability | Success: Architecture is well-planned and documented, components are properly organized, follows existing patterns and theme system_
- [ ] 5.1 Create base UI components
- Set up component structure
- Implement reusable components
- Add styling and theming
- _Leverage: src/components/BaseComponent.tsx, src/styles/theme.ts_
- _Requirements: 5.1_
- _Prompt: Role: Frontend Developer specializing in React and component architecture | Task: Create reusable UI components following requirement 5.1, extending BaseComponent patterns and using existing theme system from src/styles/theme.ts | Restrictions: Must use existing theme variables, follow component composition patterns, ensure accessibility compliance | Success: Components are reusable and properly themed, follow existing architecture, accessible and responsive_
- [ ] 5.2 Implement feature-specific components
- Create feature components
- Add state management
- Connect to API endpoints
- _Leverage: src/hooks/useApi.ts, src/components/BaseComponent.tsx_
- _Requirements: 5.2, 5.3_
- _Prompt: Role: React Developer with expertise in state management and API integration | Task: Implement feature-specific components following requirements 5.2 and 5.3, using API hooks from src/hooks/useApi.ts and extending BaseComponent patterns | Restrictions: Must use existing state management patterns, handle loading and error states properly, maintain component performance | Success: Components are fully functional with proper state management, API integration works smoothly, user experience is responsive and intuitive_
- [ ] 6. Integration and testing
- Plan integration approach
- _Leverage: src/utils/integrationUtils.ts, tests/helpers/testUtils.ts_
- _Requirements: 6.0_
- _Prompt: Role: Integration Engineer with expertise in system integration and testing strategies | Task: Plan comprehensive integration approach following requirement 6.0, leveraging integration utilities from src/utils/integrationUtils.ts and test helpers | Restrictions: Must consider all system components, ensure proper test coverage, maintain integration test reliability | Success: Integration plan is comprehensive and feasible, all system components work together correctly, integration points are well-tested_
- [ ] 6.1 Write end-to-end tests
- Set up E2E testing framework
- Write user journey tests
- Add test automation
- _Leverage: tests/helpers/testUtils.ts, tests/fixtures/data.ts_
- _Requirements: All_
- _Prompt: Role: QA Automation Engineer with expertise in E2E testing and test frameworks like Cypress or Playwright | Task: Implement comprehensive end-to-end tests covering all requirements, setting up testing framework and user journey tests using test utilities and fixtures | Restrictions: Must test real user workflows, ensure tests are maintainable and reliable, do not test implementation details | Success: E2E tests cover all critical user journeys, tests run reliably in CI/CD pipeline, user experience is validated from end-to-end_
- [ ] 6.2 Final integration and cleanup
- Integrate all components
- Fix any integration issues
- Clean up code and documentation
- _Leverage: src/utils/cleanup.ts, docs/templates/_
- _Requirements: All_
- _Prompt: Role: Senior Developer with expertise in code quality and system integration | Task: Complete final integration of all components and perform comprehensive cleanup covering all requirements, using cleanup utilities and documentation templates | Restrictions: Must not break existing functionality, ensure code quality standards are met, maintain documentation consistency | Success: All components are fully integrated and working together, code is clean and well-documented, system meets all requirements and quality standards_

View File

@@ -0,0 +1,99 @@
# Technology Stack
## Project Type
[Describe what kind of project this is: web application, CLI tool, desktop application, mobile app, library, API service, embedded system, game, etc.]
## Core Technologies
### Primary Language(s)
- **Language**: [e.g., Python 3.11, Go 1.21, TypeScript, Rust, C++]
- **Runtime/Compiler**: [if applicable]
- **Language-specific tools**: [package managers, build tools, etc.]
### Key Dependencies/Libraries
[List the main libraries and frameworks your project depends on]
- **[Library/Framework name]**: [Purpose and version]
- **[Library/Framework name]**: [Purpose and version]
### Application Architecture
[Describe how your application is structured - this could be MVC, event-driven, plugin-based, client-server, standalone, microservices, monolithic, etc.]
### Data Storage (if applicable)
- **Primary storage**: [e.g., PostgreSQL, files, in-memory, cloud storage]
- **Caching**: [e.g., Redis, in-memory, disk cache]
- **Data formats**: [e.g., JSON, Protocol Buffers, XML, binary]
### External Integrations (if applicable)
- **APIs**: [External services you integrate with]
- **Protocols**: [e.g., HTTP/REST, gRPC, WebSocket, TCP/IP]
- **Authentication**: [e.g., OAuth, API keys, certificates]
### Monitoring & Dashboard Technologies (if applicable)
- **Dashboard Framework**: [e.g., React, Vue, vanilla JS, terminal UI]
- **Real-time Communication**: [e.g., WebSocket, Server-Sent Events, polling]
- **Visualization Libraries**: [e.g., Chart.js, D3, terminal graphs]
- **State Management**: [e.g., Redux, Vuex, file system as source of truth]
## Development Environment
### Build & Development Tools
- **Build System**: [e.g., Make, CMake, Gradle, npm scripts, cargo]
- **Package Management**: [e.g., pip, npm, cargo, go mod, apt, brew]
- **Development workflow**: [e.g., hot reload, watch mode, REPL]
### Code Quality Tools
- **Static Analysis**: [Tools for code quality and correctness]
- **Formatting**: [Code style enforcement tools]
- **Testing Framework**: [Unit, integration, and/or end-to-end testing tools]
- **Documentation**: [Documentation generation tools]
### Version Control & Collaboration
- **VCS**: [e.g., Git, Mercurial, SVN]
- **Branching Strategy**: [e.g., Git Flow, GitHub Flow, trunk-based]
- **Code Review Process**: [How code reviews are conducted]
### Dashboard Development (if applicable)
- **Live Reload**: [e.g., Hot module replacement, file watchers]
- **Port Management**: [e.g., Dynamic allocation, configurable ports]
- **Multi-Instance Support**: [e.g., Running multiple dashboards simultaneously]
## Deployment & Distribution (if applicable)
- **Target Platform(s)**: [Where/how the project runs: cloud, on-premise, desktop, mobile, embedded]
- **Distribution Method**: [How users get your software: download, package manager, app store, SaaS]
- **Installation Requirements**: [Prerequisites, system requirements]
- **Update Mechanism**: [How updates are delivered]
## Technical Requirements & Constraints
### Performance Requirements
- [e.g., response time, throughput, memory usage, startup time]
- [Specific benchmarks or targets]
### Compatibility Requirements
- **Platform Support**: [Operating systems, architectures, versions]
- **Dependency Versions**: [Minimum/maximum versions of dependencies]
- **Standards Compliance**: [Industry standards, protocols, specifications]
### Security & Compliance
- **Security Requirements**: [Authentication, encryption, data protection]
- **Compliance Standards**: [GDPR, HIPAA, SOC2, etc. if applicable]
- **Threat Model**: [Key security considerations]
### Scalability & Reliability
- **Expected Load**: [Users, requests, data volume]
- **Availability Requirements**: [Uptime targets, disaster recovery]
- **Growth Projections**: [How the system needs to scale]
## Technical Decisions & Rationale
[Document key architectural and technology choices]
### Decision Log
1. **[Technology/Pattern Choice]**: [Why this was chosen, alternatives considered]
2. **[Architecture Decision]**: [Rationale, trade-offs accepted]
3. **[Tool/Library Selection]**: [Reasoning, evaluation criteria]
## Known Limitations
[Document any technical debt, limitations, or areas for improvement]
- [Limitation 1]: [Impact and potential future solutions]
- [Limitation 2]: [Why it exists and when it might be addressed]

View File

@@ -0,0 +1,64 @@
# User Templates
This directory allows you to create custom templates that override the default Spec Workflow templates.
## How to Use Custom Templates
1. **Create your custom template file** in this directory with the exact same name as the default template you want to override:
- `requirements-template.md` - Override requirements document template
- `design-template.md` - Override design document template
- `tasks-template.md` - Override tasks document template
- `product-template.md` - Override product steering template
- `tech-template.md` - Override tech steering template
- `structure-template.md` - Override structure steering template
2. **Template Loading Priority**:
- The system first checks this `user-templates/` directory
- If a matching template is found here, it will be used
- Otherwise, the default template from `templates/` will be used
## Example Custom Template
To create a custom requirements template:
1. Create a file named `requirements-template.md` in this directory
2. Add your custom structure, for example:
```markdown
# Requirements Document
## Executive Summary
[Your custom section]
## Business Requirements
[Your custom structure]
## Technical Requirements
[Your custom fields]
## Custom Sections
[Add any sections specific to your workflow]
```
## Template Variables
Templates can include placeholders that will be replaced when documents are created:
- `{{projectName}}` - The name of your project
- `{{featureName}}` - The name of the feature being specified
- `{{date}}` - The current date
- `{{author}}` - The document author
## Best Practices
1. **Start from defaults**: Copy a default template from `../templates/` as a starting point
2. **Keep structure consistent**: Maintain similar section headers for tool compatibility
3. **Document changes**: Add comments explaining why sections were added/modified
4. **Version control**: Track your custom templates in version control
5. **Test thoroughly**: Ensure custom templates work with the spec workflow tools
## Notes
- Custom templates are project-specific and not included in the package distribution
- The `templates/` directory contains the default templates which are updated with each version
- Your custom templates in this directory are preserved during updates
- If a custom template has errors, the system will fall back to the default template

View File

@@ -10,11 +10,11 @@ RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm config set shamefully-hoist true && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
@@ -22,13 +22,14 @@ RUN \
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
COPY --from=deps /app/node_modules ./node_modules
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_OPTIONS="--no-deprecation"
RUN \
if [ -f yarn.lock ]; then yarn run build; \
@@ -41,7 +42,7 @@ RUN \
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
ENV NODE_ENV=production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
@@ -64,8 +65,8 @@ USER nextjs
EXPOSE 3000
ENV PORT 3000
ENV PORT=3000
# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
CMD HOSTNAME="0.0.0.0" node server.js
CMD ["node", "server.js"]

2409
bun.lock Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -8,6 +8,7 @@ const NEXT_PUBLIC_SERVER_URL = process.env.VERCEL_PROJECT_PRODUCTION_URL
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone',
images: {
remotePatterns: [
...[NEXT_PUBLIC_SERVER_URL /* 'https://example.com' */].map((item) => {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1,23 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="1000" height="1000"><style>
#light-icon {
display: inline;
}
#dark-icon {
display: none;
}
@media (prefers-color-scheme: dark) {
#light-icon {
display: none;
}
#dark-icon {
display: inline;
}
}
</style><g id="light-icon"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="1000" height="1000"><g clip-path="url(#SvgjsClipPath1059)"><rect width="1000" height="1000" fill="#000000"></rect><g transform="matrix(5,0,0,5,192.5,150)"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="123" height="140"><svg width="123" height="140" viewBox="0 0 123 140" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M60.2569 118.758L18.9035 94.9917C18.4016 94.6917 18.067 94.1583 18.067 93.5583V56.825C18.067 56.1917 18.7696 55.7917 19.3049 56.0917L67.3164 83.6917C67.9855 84.0917 68.822 83.5917 68.822 82.825V64.925C68.822 64.225 68.4539 63.5583 67.8182 63.1917L10.0707 29.9917C9.56883 29.6917 8.89968 29.6917 8.39782 29.9917L0.836436 34.3583C0.334574 34.6583 0 35.1917 0 35.7917V104.025C0 104.625 0.334574 105.158 0.836436 105.458L60.1565 139.592C60.6583 139.892 61.3275 139.892 61.8293 139.592L111.647 110.925C112.317 110.525 112.317 109.592 111.647 109.192L96.1232 100.258C95.4875 99.8917 94.7515 99.8917 94.1158 100.258L61.9632 118.758C61.4613 119.058 60.7922 119.058 60.2903 118.758H60.2569Z" fill="white"></path>
<path d="M121.149 34.325L61.8294 0.225C61.3275 -0.075 60.6584 -0.075 60.1565 0.225L28.8069 18.2583C28.1378 18.6583 28.1378 19.5917 28.8069 19.9917L44.1973 28.8583C44.833 29.225 45.5691 29.225 46.2048 28.8583L60.2569 20.7917C60.7588 20.4917 61.4279 20.4917 61.9298 20.7917L103.283 44.5583C103.785 44.8583 104.12 45.3917 104.12 45.9917V82.8917C104.12 83.5917 104.488 84.2583 105.123 84.625L120.514 93.4583C121.183 93.8583 122.019 93.3583 122.019 92.5917V35.7917C122.019 35.1917 121.685 34.6583 121.183 34.3583L121.149 34.325Z" fill="white"></path>
</svg></svg></g></g><defs><clipPath id="SvgjsClipPath1059"><rect width="1000" height="1000" x="0" y="0" rx="350" ry="350"></rect></clipPath></defs></svg></g><g id="dark-icon"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="1000" height="1000"><g clip-path="url(#SvgjsClipPath1060)"><rect width="1000" height="1000" fill="#000000"></rect><g transform="matrix(5,0,0,5,192.5,150)"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="123" height="140"><svg width="123" height="140" viewBox="0 0 123 140" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M60.2569 118.758L18.9035 94.9917C18.4016 94.6917 18.067 94.1583 18.067 93.5583V56.825C18.067 56.1917 18.7696 55.7917 19.3049 56.0917L67.3164 83.6917C67.9855 84.0917 68.822 83.5917 68.822 82.825V64.925C68.822 64.225 68.4539 63.5583 67.8182 63.1917L10.0707 29.9917C9.56883 29.6917 8.89968 29.6917 8.39782 29.9917L0.836436 34.3583C0.334574 34.6583 0 35.1917 0 35.7917V104.025C0 104.625 0.334574 105.158 0.836436 105.458L60.1565 139.592C60.6583 139.892 61.3275 139.892 61.8293 139.592L111.647 110.925C112.317 110.525 112.317 109.592 111.647 109.192L96.1232 100.258C95.4875 99.8917 94.7515 99.8917 94.1158 100.258L61.9632 118.758C61.4613 119.058 60.7922 119.058 60.2903 118.758H60.2569Z" fill="white"></path>
<path d="M121.149 34.325L61.8294 0.225C61.3275 -0.075 60.6584 -0.075 60.1565 0.225L28.8069 18.2583C28.1378 18.6583 28.1378 19.5917 28.8069 19.9917L44.1973 28.8583C44.833 29.225 45.5691 29.225 46.2048 28.8583L60.2569 20.7917C60.7588 20.4917 61.4279 20.4917 61.9298 20.7917L103.283 44.5583C103.785 44.8583 104.12 45.3917 104.12 45.9917V82.8917C104.12 83.5917 104.488 84.2583 105.123 84.625L120.514 93.4583C121.183 93.8583 122.019 93.3583 122.019 92.5917V35.7917C122.019 35.1917 121.685 34.6583 121.183 34.3583L121.149 34.325Z" fill="white"></path>
</svg></svg></g></g><defs><clipPath id="SvgjsClipPath1060"><rect width="1000" height="1000" x="0" y="0" rx="350" ry="350"></rect></clipPath></defs></svg></g></svg>
<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 500C0 223.858 223.858 0 500 0C776.142 0 1000 223.858 1000 500C1000 776.142 776.142 1000 500 1000C223.858 1000 0 776.142 0 500Z" fill="#37140B"/>
<path d="M639.79 388.332C652.372 386.234 664.418 396.841 676.92 397.616C698.196 398.934 749.02 375.487 766.229 398.114C768.392 400.958 769.145 403.918 769.977 409.976C769.875 414.107 769.62 417.251 768.912 420.881C764.799 441.966 756.093 451.063 748.359 458.089C733.109 468.401 714.121 477.122 698.378 473.086C686.036 469.921 673.826 462.154 661.482 458.853C650.479 455.909 637.184 458.965 627.22 443.498C625.061 440.145 622.622 434.772 622.264 427.509C621.907 420.258 623.188 413.492 624.695 407.849C628.604 393.216 633.651 390.644 639.79 388.332Z" fill="#FFFBEB"/>
<path d="M586.232 522.039C591.796 521.171 605.357 529.016 609.286 541.071C610.62 545.166 610.67 546.3 610.573 551.403C608.755 559.974 605.869 564.032 602.692 568.088C590.065 584.208 575.598 588.545 562.019 595.338C531.177 610.766 502.49 623.486 471.01 619.742C461.716 618.636 453.08 617.987 444.253 609.131C432.368 600.32 424.056 589.341 414.242 568.523C431.161 566.285 448.16 568.477 465.094 567.748C480.663 567.079 496.356 563.308 511.822 558.419C526.632 553.738 541.604 547.469 556.213 539.225C565.86 533.782 575.489 525.62 585.262 522.337C585.584 522.228 585.908 522.139 586.232 522.039Z" fill="#FFFBEB"/>
<path d="M660.038 503.849C672.74 500.098 684.693 511.677 697.212 515.212C714.634 520.131 732.305 521.907 749.808 522.779C765.844 523.576 781.934 519.594 797.908 516.037C812.699 512.744 839.522 502.194 853.254 511.666C855.77 513.401 859.698 517.219 860.743 524.638C861.687 531.395 860.216 541.916 858.917 547.643C850.544 584.503 812.861 609.876 798.117 612.406C790.597 613.696 782.978 609.331 775.433 609.228C758.284 608.995 740.896 613.596 723.733 615.53C709.877 617.092 694.163 612.903 680.707 621.764C680.396 621.97 680.086 622.193 679.775 622.407C693.867 635.219 720.95 653.764 731.715 679.56C733.609 684.096 734.537 687.914 734.711 695.043C732.077 716.055 719.305 713.642 713.357 723.771C711.485 735.464 721.407 745.136 722.678 757.941C723.161 762.812 722.703 767.022 721.8 771.343C719.34 783.114 712.307 797.918 707.711 801.445C701.418 798.783 694.914 799.479 688.561 798.531L649.042 792.856C629.118 790.532 601.773 783.596 582.297 787.714C572.604 789.764 563.013 795.593 553.413 799.723C539.124 805.871 523.304 809.22 508.891 805.999C497.276 803.404 479.477 795.509 471.773 768.715C469.479 760.741 468.187 751.224 467.753 741.145C466.192 704.965 475.032 701.614 476.099 673.869C476.281 669.16 476.257 666.655 477.33 662.729C491.388 645.125 537.024 646.333 555.736 641.76C570.638 638.117 585.454 632.762 600.333 628.613C617.188 623.914 634.004 620.405 650.839 614.791C643.422 612.934 635.951 611.799 629.053 603.221C625.849 599.237 621.747 591.973 620.757 581.907C619.917 573.37 620.893 565.328 622.618 558.196C630.456 525.817 647.116 511.961 660.038 503.849ZM610.712 654.424L609.622 654.826C602.365 657.37 570.567 659.131 566.466 671.264C564.96 675.721 566.288 701.959 566.638 708.325C567.042 715.674 567.974 724.415 570.467 728.397C573.2 732.759 577.628 730.47 580.487 728.158C590.505 720.384 622.645 687.763 627.343 663.322C627.85 660.681 627.627 661.153 627.323 657.768C623.948 650.948 614.768 652.827 610.712 654.424Z" fill="#FFFBEB"/>
<path d="M585.965 155.07C589.202 154.741 592.44 154.567 595.679 154.549C609.664 154.759 632.672 159.215 642.967 189.554C647.224 202.1 647.084 211.816 647.004 227.896C676.208 237.718 731.375 229.26 756.446 271.712C759.853 277.48 762.806 285.521 763.659 296.685C764.176 303.437 763.93 309.608 762.379 315.298C755.676 339.884 726.239 347.385 714.798 350.968C705.573 353.857 696.282 353.375 687.022 354.683C664.782 357.824 650.77 362.757 628.279 353.427C624.068 351.68 618.712 350.66 615.286 343.088L615.25 339.536C620.507 323.181 650.82 312.047 660.516 292.455C661.882 289.696 661.927 289.134 662.107 284.769C657.502 271.818 635.533 266.843 628.793 266.055C609.68 263.819 567.782 277.89 550.026 295.765C540.934 304.917 527.626 328.746 520.916 348.106C514.991 365.209 516.569 394.991 510.203 409.896C505.86 420.068 499.158 423.295 493.704 426.246C478.406 434.527 464.743 430.765 450.745 411.21C444.12 401.953 437.784 392.069 430.146 391.544C422.053 390.989 403.427 399.187 397.705 416.097C396.34 420.129 396.319 422.749 396.386 428.018C397.324 433.115 398.625 437.656 400.519 440.238C406.692 448.658 416.866 448.874 423.751 453.278C430.288 457.461 436.549 464.122 442.79 470.842C461.976 445.498 483.347 445.009 504.044 435.544C508.81 433.363 514.768 432.026 519.119 426.104C524.083 419.349 528.448 406.247 532.91 397.025C535.221 396.494 537.532 396.511 539.843 397.074C548.824 399.194 592.748 425.291 596.505 442.522C597.379 446.526 597.702 449.819 597.051 454.294C591.767 490.679 517.143 504.036 502.888 502.424C495.818 501.626 489.254 495.872 482.346 492.356C474.67 488.45 465.783 488.144 458.023 490.044C448.472 492.382 440.26 519.124 430.678 526.478C415.917 537.806 397.611 527.386 383.831 542.796C371.8 556.249 379.329 582.89 377.51 608.948C376.041 630.009 372.256 651.025 369.313 670.85C368.633 686.033 371.385 698.944 373.702 712.189C371.83 737.014 371.255 759.984 371.285 785.364C368.363 795.228 364.588 807.533 360.693 814.29C340.202 849.83 315.091 851.632 292.056 836.325C283.463 830.614 266.72 820.44 261.975 797.573C256.143 769.461 268.181 714.75 270.656 684.979C271.381 676.255 271.99 668.324 270.252 660.392C268.002 658.561 266.009 659.654 263.778 661.165C257.88 665.156 252.198 672.647 246.46 678.18C240.014 684.393 233.257 688.8 226.627 693.239C207.57 705.998 185.885 718.111 166.32 712.798C154.455 709.576 146.574 698.574 138.957 673.163L140.916 667.715C162.337 608.158 199.581 628.011 221.583 569.413C229.462 548.427 237.313 520.911 241.426 492.577C243.13 480.84 244.281 462.499 247.136 453.011C248.145 449.661 248.562 447.507 248.997 443.162C247.815 433.185 244.316 429.954 241.142 425.485C223.477 430.294 202.39 432.91 185.396 416.47C182.102 413.283 178.035 407.663 176.851 397.756C174.883 381.291 180.523 357.352 183.157 342.732C206.222 328.451 244.784 336.186 263.586 297.827C263.581 297.408 263.574 296.99 263.569 296.572C263.383 273.526 260.033 251.433 260.275 228.808C260.352 221.547 260.839 215.156 262.885 210.152C266.196 202.053 270.955 197.584 275.2 194.779C286.055 187.609 297.616 187.725 308.702 184.965C316.783 182.952 325.557 178.39 333.646 179.322C343.814 180.492 351.693 198.968 358.111 219.001C357.659 232.069 356.7 246.734 357.464 259.769C357.909 267.354 358.842 274.095 361.296 278.377C370.749 294.874 478.087 270.097 497.688 269.084C511.585 268.366 525.537 276.48 539.439 273.111C552.786 269.878 566.197 258.393 579.032 248.118C555.96 231.967 533.081 240.347 512.143 203.159C534.52 173.732 561.527 162.075 585.965 155.07Z" fill="#FFFBEB"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -0,0 +1,7 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="500" height="500" fill="#FBEBD9"/>
<path d="M319.895 194.166C326.186 193.117 332.209 198.42 338.46 198.808C349.098 199.467 374.51 187.743 383.115 199.057C384.196 200.479 384.573 201.959 384.989 204.988C384.937 207.053 384.81 208.625 384.456 210.44C382.4 220.983 378.046 225.531 374.18 229.044C366.554 234.2 357.061 238.561 349.189 236.543C343.018 234.96 336.913 231.077 330.741 229.426C325.239 227.954 318.592 229.482 313.61 221.749C312.531 220.072 311.311 217.386 311.132 213.754C310.953 210.129 311.594 206.746 312.347 203.924C314.302 196.608 316.826 195.322 319.895 194.166Z" fill="#39150C"/>
<path d="M293.116 261.019C295.898 260.585 302.678 264.508 304.643 270.535C305.31 272.583 305.335 273.15 305.286 275.701C304.377 279.987 302.934 282.016 301.346 284.044C295.032 292.104 287.799 294.272 281.009 297.669C265.588 305.383 251.245 311.743 235.505 309.871C230.858 309.318 226.54 308.993 222.126 304.565C216.184 300.16 212.028 294.67 207.121 284.262C215.58 283.142 224.08 284.238 232.547 283.874C240.331 283.539 248.178 281.654 255.911 279.21C263.316 276.869 270.802 273.734 278.106 269.613C282.93 266.891 287.744 262.81 292.631 261.169C292.792 261.114 292.954 261.069 293.116 261.019Z" fill="#39150C"/>
<path d="M330.019 251.924C336.37 250.048 342.346 255.838 348.606 257.606C357.317 260.065 366.152 260.953 374.904 261.389C382.922 261.788 390.967 259.797 398.954 258.018C406.349 256.372 419.761 251.096 426.627 255.833C427.885 256.7 429.849 258.609 430.371 262.319C430.843 265.697 430.108 270.958 429.458 273.821C425.272 292.251 406.43 304.938 399.058 306.203C395.298 306.848 391.489 304.665 387.716 304.614C379.142 304.497 370.448 306.798 361.866 307.765C354.938 308.546 347.081 306.451 340.353 310.882C340.197 310.985 340.043 311.096 339.887 311.203C346.933 317.609 360.475 326.882 365.857 339.78C366.804 342.048 367.268 343.957 367.355 347.521C366.038 358.027 359.652 356.821 356.678 361.885C355.742 367.732 360.703 372.568 361.339 378.97C361.58 381.406 361.351 383.511 360.9 385.671C359.67 391.557 356.153 398.959 353.855 400.722C350.709 399.391 347.457 399.739 344.28 399.265L324.521 396.428C314.559 395.265 300.886 391.798 291.148 393.857C286.302 394.881 281.506 397.796 276.706 399.861C269.562 402.935 261.652 404.61 254.445 402.999C248.638 401.702 239.738 397.754 235.886 384.357C234.739 380.37 234.093 375.612 233.876 370.572C233.096 352.482 237.516 350.807 238.05 336.934C238.14 334.58 238.128 333.327 238.665 331.364C245.694 322.562 268.512 323.166 277.868 320.879C285.319 319.058 292.727 316.381 300.166 314.306C308.594 311.957 317.002 310.202 325.419 307.395C321.711 306.466 317.975 305.899 314.526 301.61C312.924 299.618 310.873 295.986 310.378 290.953C309.958 286.684 310.446 282.664 311.309 279.098C315.228 262.908 323.558 255.98 330.019 251.924ZM305.356 327.212L304.811 327.413C301.182 328.685 285.283 329.565 283.233 335.632C282.48 337.86 283.144 350.979 283.319 354.162C283.521 357.837 283.987 362.207 285.233 364.198C286.6 366.379 288.814 365.235 290.243 364.079C295.252 360.192 311.322 343.881 313.671 331.66C313.925 330.34 313.813 330.576 313.661 328.884C311.974 325.474 307.384 326.413 305.356 327.212Z" fill="#39150C"/>
<path d="M292.982 77.535C294.601 77.3702 296.22 77.2834 297.839 77.2743C304.832 77.3793 316.336 79.6072 321.483 94.7771C323.612 101.05 323.542 105.908 323.502 113.948C338.104 118.859 365.687 114.63 378.223 135.856C379.926 138.74 381.403 142.76 381.829 148.342C382.088 151.719 381.965 154.804 381.189 157.649C377.838 169.942 363.119 173.693 357.399 175.484C352.786 176.928 348.141 176.687 343.511 177.341C332.391 178.912 325.385 181.378 314.139 176.713C312.034 175.84 309.356 175.33 307.643 171.544L307.625 169.768C310.253 161.591 325.41 156.023 330.258 146.227C330.941 144.848 330.964 144.567 331.053 142.384C328.751 135.909 317.766 133.421 314.396 133.027C304.84 131.909 283.891 138.945 275.013 147.882C270.467 152.458 263.813 164.373 260.458 174.053C257.495 182.604 258.284 197.496 255.101 204.948C252.93 210.034 249.579 211.647 246.852 213.123C239.203 217.263 232.371 215.382 225.372 205.605C222.06 200.977 218.892 196.034 215.073 195.772C211.026 195.494 201.713 199.593 198.852 208.048C198.17 210.064 198.159 211.374 198.193 214.009C198.662 216.557 199.312 218.828 200.259 220.119C203.346 224.329 208.433 224.437 211.875 226.639C215.144 228.73 218.274 232.061 221.395 235.421C230.988 222.749 241.673 222.505 252.022 217.772C254.405 216.682 257.384 216.013 259.559 213.052C262.041 209.674 264.224 203.123 266.455 198.512C267.61 198.247 268.766 198.255 269.921 198.537C274.412 199.597 296.374 212.645 298.252 221.261C298.689 223.263 298.851 224.909 298.525 227.147C295.883 245.339 258.571 252.018 251.444 251.212C247.909 250.813 244.627 247.936 241.173 246.178C237.335 244.225 232.891 244.072 229.011 245.022C224.236 246.191 220.13 259.562 215.339 263.239C207.958 268.903 198.805 263.693 191.915 271.398C185.9 278.125 189.664 291.445 188.755 304.474C188.02 315.005 186.128 325.512 184.656 335.425C184.316 343.017 185.692 349.472 186.851 356.094C185.915 368.507 185.627 379.992 185.642 392.682C184.181 397.614 182.294 403.767 180.346 407.145C170.101 424.915 157.545 425.816 146.028 418.162C141.731 415.307 133.36 410.22 130.987 398.786C128.071 384.73 134.09 357.375 135.328 342.489C135.69 338.127 135.995 334.162 135.126 330.196C134.001 329.28 133.004 329.827 131.889 330.582C128.94 332.578 126.099 336.324 123.23 339.09C120.007 342.196 116.628 344.4 113.313 346.619C103.785 352.999 92.9424 359.055 83.1599 356.399C77.2274 354.788 73.2866 349.287 69.4783 336.581L70.4576 333.857C81.1682 304.079 99.7903 314.005 110.791 284.706C114.731 274.214 118.656 260.455 120.713 246.288C121.565 240.42 122.14 231.249 123.568 226.505C124.072 224.83 124.281 223.753 124.498 221.581C123.907 216.592 122.158 214.977 120.571 212.743C111.738 215.147 101.195 216.455 92.6978 208.235C91.0506 206.641 89.0173 203.831 88.4251 198.878C87.4412 190.645 90.2611 178.676 91.5784 171.366C103.111 164.225 122.392 168.093 131.793 148.913C131.79 148.704 131.787 148.495 131.785 148.286C131.691 136.763 130.016 125.716 130.137 114.404C130.176 110.773 130.419 107.578 131.442 105.076C133.098 101.026 135.477 98.7916 137.6 97.3896C143.027 93.8042 148.808 93.8625 154.351 92.4822C158.391 91.4758 162.778 89.1951 166.823 89.6608C171.907 90.2457 175.846 99.4841 179.055 109.501C178.829 116.034 178.35 123.367 178.732 129.884C178.954 133.677 179.421 137.047 180.648 139.189C185.374 147.437 239.043 135.048 248.844 134.542C255.792 134.183 262.768 138.24 269.719 136.555C276.393 134.939 283.098 129.196 289.516 124.059C277.98 115.984 266.54 120.174 256.071 101.58C267.26 86.8657 280.763 81.0372 292.982 77.535Z" fill="#39150C"/>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -5,22 +5,37 @@ import { InlineToolbarFeatureClient as InlineToolbarFeatureClient_e70f5e05f09f93
import { FixedToolbarFeatureClient as FixedToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { HeadingFeatureClient as HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { ParagraphFeatureClient as ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { StrikethroughFeatureClient as StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { InlineCodeFeatureClient as InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { SubscriptFeatureClient as SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { SuperscriptFeatureClient as SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { UnorderedListFeatureClient as UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { OrderedListFeatureClient as OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { ChecklistFeatureClient as ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { TableFeatureClient as TableFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { AlignFeatureClient as AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { IndentFeatureClient as IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { BlockquoteFeatureClient as BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { LinkFeatureClient as LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { UploadFeatureClient as UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { RelationshipFeatureClient as RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { OverviewComponent as OverviewComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client'
import { MetaTitleComponent as MetaTitleComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client'
import { MetaImageComponent as MetaImageComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client'
import { MetaDescriptionComponent as MetaDescriptionComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client'
import { PreviewComponent as PreviewComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client'
import { SlugComponent as SlugComponent_92cc057d0a2abb4f6cf0307edf59f986 } from '@/fields/slug/SlugComponent'
import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { BlocksFeatureClient as BlocksFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { LinkToDoc as LinkToDoc_aead06e4cbf6b2620c5c51c9ab283634 } from '@payloadcms/plugin-search/client'
import { ReindexButton as ReindexButton_aead06e4cbf6b2620c5c51c9ab283634 } from '@payloadcms/plugin-search/client'
import { RowLabel as RowLabel_ec255a65fa6fa8d1faeb09cf35284224 } from '@/Header/RowLabel'
import { RowLabel as RowLabel_1f6ff6ff633e3695d348f4f3c58f1466 } from '@/Footer/RowLabel'
import { default as default_e33611a3ec57e4f910acec3df7a88d27 } from '../../../components/Icon/Icon'
import { default as default_2f594692661464c361c9fb763de845e2 } from '../../../components/Logo/Logo'
import { default as default_1a7510af427896d367a49dbf838d2de6 } from '@/components/BeforeDashboard'
import { default as default_8a7ab0eb7ab5c511aba12e68480bfe5e } from '@/components/BeforeLogin'
import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 } from '@payloadcms/storage-s3/client'
@@ -33,22 +48,37 @@ export const importMap = {
"@payloadcms/richtext-lexical/client#FixedToolbarFeatureClient": FixedToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#HeadingFeatureClient": HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#ParagraphFeatureClient": ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#UnderlineFeatureClient": UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#BoldFeatureClient": BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#ItalicFeatureClient": ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#UnderlineFeatureClient": UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#StrikethroughFeatureClient": StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#InlineCodeFeatureClient": InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#SubscriptFeatureClient": SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#SuperscriptFeatureClient": SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#UnorderedListFeatureClient": UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#OrderedListFeatureClient": OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#ChecklistFeatureClient": ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#TableFeatureClient": TableFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#AlignFeatureClient": AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#IndentFeatureClient": IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#BlockquoteFeatureClient": BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient": HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#LinkFeatureClient": LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#UploadFeatureClient": UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#RelationshipFeatureClient": RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/plugin-seo/client#OverviewComponent": OverviewComponent_a8a977ebc872c5d5ea7ee689724c0860,
"@payloadcms/plugin-seo/client#MetaTitleComponent": MetaTitleComponent_a8a977ebc872c5d5ea7ee689724c0860,
"@payloadcms/plugin-seo/client#MetaImageComponent": MetaImageComponent_a8a977ebc872c5d5ea7ee689724c0860,
"@payloadcms/plugin-seo/client#MetaDescriptionComponent": MetaDescriptionComponent_a8a977ebc872c5d5ea7ee689724c0860,
"@payloadcms/plugin-seo/client#PreviewComponent": PreviewComponent_a8a977ebc872c5d5ea7ee689724c0860,
"@/fields/slug/SlugComponent#SlugComponent": SlugComponent_92cc057d0a2abb4f6cf0307edf59f986,
"@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient": HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#BlocksFeatureClient": BlocksFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/plugin-search/client#LinkToDoc": LinkToDoc_aead06e4cbf6b2620c5c51c9ab283634,
"@payloadcms/plugin-search/client#ReindexButton": ReindexButton_aead06e4cbf6b2620c5c51c9ab283634,
"@/Header/RowLabel#RowLabel": RowLabel_ec255a65fa6fa8d1faeb09cf35284224,
"@/Footer/RowLabel#RowLabel": RowLabel_1f6ff6ff633e3695d348f4f3c58f1466,
"./components/Icon/Icon#default": default_e33611a3ec57e4f910acec3df7a88d27,
"./components/Logo/Logo#default": default_2f594692661464c361c9fb763de845e2,
"@/components/BeforeDashboard#default": default_1a7510af427896d367a49dbf838d2de6,
"@/components/BeforeLogin#default": default_8a7ab0eb7ab5c511aba12e68480bfe5e,
"@payloadcms/storage-s3/client#S3ClientUploadHandler": S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24

View File

@@ -0,0 +1,33 @@
import clsx from 'clsx'
import React from 'react'
interface IconProps {
className?: string
loading?: 'lazy' | 'eager'
priority?: 'auto' | 'high' | 'low'
}
const Icon = (props: IconProps) => {
const {
className,
loading: loadingFromProps = 'lazy',
priority: priorityFromProps = 'low',
} = props
return (
/* eslint-disable @next/next/no-img-element */
<img
alt="ricenoodlestw Icon"
width={64}
height={64}
decoding="async"
loading={loadingFromProps}
fetchPriority={priorityFromProps}
className={clsx('h-16 w-16', className)}
src="/ricenoodles_icon_light.svg"
/>
)
}
export { Icon }
export default Icon

View File

@@ -7,7 +7,7 @@ interface Props {
priority?: 'auto' | 'high' | 'low'
}
export const Logo = (props: Props) => {
const Logo = (props: Props) => {
const { loading: loadingFromProps, priority: priorityFromProps, className } = props
const loading = loadingFromProps || 'lazy'
@@ -23,7 +23,10 @@ export const Logo = (props: Props) => {
fetchPriority={priority}
decoding="async"
className={clsx('max-w-[9.375rem] w-full h-[34px]', className)}
src="https://www.ricenoodlestw.com/_astro/ricenoodle_logo.Cv6D2KP4.svg"
src="/ricenoodles_logo_wh.svg"
/>
)
}
export { Logo }
export default Logo

View File

@@ -1,20 +1,78 @@
import type { TextFieldSingleValidation } from 'payload'
import {
// Text Formatting Features
BoldFeature,
ItalicFeature,
LinkFeature,
ParagraphFeature,
lexicalEditor,
UnderlineFeature,
StrikethroughFeature,
InlineCodeFeature,
SubscriptFeature,
SuperscriptFeature,
// Block Features
ParagraphFeature,
HeadingFeature,
// List Features
UnorderedListFeature,
OrderedListFeature,
ChecklistFeature,
// Table Feature (Experimental)
EXPERIMENTAL_TableFeature,
// Layout Features
AlignFeature,
IndentFeature,
BlockquoteFeature,
HorizontalRuleFeature,
// Media & Link Features
LinkFeature,
UploadFeature,
RelationshipFeature,
// Toolbar Features
InlineToolbarFeature,
FixedToolbarFeature,
// Core
lexicalEditor,
type LinkFields,
} from '@payloadcms/richtext-lexical'
export const defaultLexical = lexicalEditor({
features: [
// Essential Block Features
ParagraphFeature(),
UnderlineFeature(),
HeadingFeature({
enabledHeadingSizes: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
}),
// Text Formatting
BoldFeature(),
ItalicFeature(),
UnderlineFeature(),
StrikethroughFeature(),
InlineCodeFeature(),
SubscriptFeature(),
SuperscriptFeature(),
// Lists - NOW INCLUDED!
UnorderedListFeature(),
OrderedListFeature(),
ChecklistFeature(),
// Tables - EXPERIMENTAL BUT FULLY FUNCTIONAL!
EXPERIMENTAL_TableFeature(),
// Layout & Structure
AlignFeature(),
IndentFeature(),
BlockquoteFeature(),
HorizontalRuleFeature(),
// Links with Custom Validation
LinkFeature({
enabledCollections: ['pages', 'posts'],
fields: ({ defaultFields }) => {
@@ -43,5 +101,28 @@ export const defaultLexical = lexicalEditor({
]
},
}),
// Media Features
UploadFeature({
collections: {
media: {
fields: [
{
name: 'caption',
type: 'richText',
editor: lexicalEditor(),
},
],
},
},
}),
RelationshipFeature({
enabledCollections: ['pages', 'posts'],
}),
// Toolbar Features for Better UX
InlineToolbarFeature(),
FixedToolbarFeature(),
],
})

View File

@@ -214,6 +214,7 @@ export interface Page {
export interface Post {
id: string;
title: string;
articleSource?: string | null;
heroImage?: (string | null) | Media;
content: {
root: {
@@ -1130,6 +1131,7 @@ export interface FormBlockSelect<T extends boolean = true> {
*/
export interface PostsSelect<T extends boolean = true> {
title?: T;
articleSource?: T;
heroImage?: T;
content?: T;
relatedPosts?: T;

View File

@@ -26,6 +26,7 @@ export default buildConfig({
// The `BeforeLogin` component renders a message that you see while logging into your admin panel.
graphics: {
Logo: './components/Logo/Logo',
Icon: './components/Icon/Icon',
},
// Feel free to delete this at any time. Simply remove the line below.
beforeLogin: ['@/components/BeforeLogin'],