mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							137 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
	
	
							137 lines
						
					
					
						
							3.6 KiB
						
					
					
				# CLAUDE.md
 | 
						|
 | 
						|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
 | 
						|
 | 
						|
## Development Commands
 | 
						|
 | 
						|
### Starting the Application
 | 
						|
```bash
 | 
						|
# Start Rails server
 | 
						|
PORT=3001 bundle exec rails s -p 3001
 | 
						|
 | 
						|
# Start Webpack dev server (separate terminal)
 | 
						|
bundle exec ./bin/shakapacker-dev-server
 | 
						|
 | 
						|
# Or start both with foreman
 | 
						|
foreman start -f Procfile.dev
 | 
						|
```
 | 
						|
 | 
						|
### Database Operations
 | 
						|
```bash
 | 
						|
# Create and migrate database
 | 
						|
rails db:create db:migrate
 | 
						|
 | 
						|
# Reset database
 | 
						|
rails db:drop db:create db:migrate
 | 
						|
 | 
						|
# Run seeds
 | 
						|
rails db:seed
 | 
						|
```
 | 
						|
 | 
						|
### Testing
 | 
						|
```bash
 | 
						|
# Run all tests
 | 
						|
bundle exec rspec
 | 
						|
 | 
						|
# Run specific test file
 | 
						|
bundle exec rspec spec/path/to/test_spec.rb
 | 
						|
 | 
						|
# Run system tests with visible browser
 | 
						|
HEADLESS=false bundle exec rspec spec/system/
 | 
						|
 | 
						|
# Run tests with coverage
 | 
						|
COVERAGE=true bundle exec rspec
 | 
						|
```
 | 
						|
 | 
						|
### Code Quality
 | 
						|
```bash
 | 
						|
# Ruby linting
 | 
						|
bundle exec rubocop
 | 
						|
bundle exec rubocop -a  # auto-correct
 | 
						|
 | 
						|
# JavaScript linting
 | 
						|
yarn eslint
 | 
						|
 | 
						|
# ERB linting
 | 
						|
bundle exec erblint --lint-all
 | 
						|
 | 
						|
# Security scanning
 | 
						|
bundle exec brakeman
 | 
						|
```
 | 
						|
 | 
						|
### Asset Management
 | 
						|
```bash
 | 
						|
# Install JavaScript dependencies
 | 
						|
yarn install
 | 
						|
 | 
						|
# Compile assets for production
 | 
						|
bundle exec rails assets:precompile
 | 
						|
 | 
						|
# Start webpack dev server
 | 
						|
bundle exec ./bin/shakapacker-dev-server
 | 
						|
```
 | 
						|
 | 
						|
## Application Architecture
 | 
						|
 | 
						|
### Core Domain Models
 | 
						|
- **Template**: PDF form templates with fields for signing/filling
 | 
						|
- **Submission**: Instance of a template being processed with specific submitters
 | 
						|
- **Submitter**: Individual who needs to fill/sign a document within a submission
 | 
						|
- **User**: System users (admins, team members) who manage templates and submissions
 | 
						|
- **Account**: Multi-tenant organization container
 | 
						|
 | 
						|
### Key Relationships
 | 
						|
- Templates belong to Accounts and have many Submissions
 | 
						|
- Submissions have many Submitters (signing parties)
 | 
						|
- Each Submitter has specific fields to complete
 | 
						|
- CompletedSubmitter and CompletedDocument track completion state
 | 
						|
 | 
						|
### Frontend Architecture
 | 
						|
- **Rails Views**: Server-rendered ERB templates with Turbo for interactivity
 | 
						|
- **Vue.js Components**: Used for complex interactive forms (template builder, submission forms)
 | 
						|
- **Stimulus**: Lightweight JavaScript controllers for DOM interactions
 | 
						|
- **Tailwind CSS**: Utility-first CSS framework with DaisyUI components
 | 
						|
 | 
						|
### Background Jobs (Sidekiq)
 | 
						|
- Document processing and PDF generation
 | 
						|
- Email notifications and reminders
 | 
						|
- Webhook deliveries
 | 
						|
- Search indexing
 | 
						|
 | 
						|
### File Storage
 | 
						|
- Uses Active Storage for file management
 | 
						|
- Supports local disk, AWS S3, Google Cloud, Azure storage
 | 
						|
- PDF processing with HexaPDF library
 | 
						|
- Image processing with ruby-vips
 | 
						|
 | 
						|
### API Structure
 | 
						|
- RESTful JSON API under `/api` namespace
 | 
						|
- API authentication via access tokens
 | 
						|
- Webhook system for real-time integrations
 | 
						|
- OpenAPI documentation in `docs/openapi.json`
 | 
						|
 | 
						|
## Key Configuration Files
 | 
						|
- `config/routes.rb`: Main routing configuration with API and web routes
 | 
						|
- `config/application.rb`: Rails application configuration
 | 
						|
- `shakapacker.yml`: JavaScript build configuration
 | 
						|
- `tailwind.config.js`: CSS framework configuration
 | 
						|
 | 
						|
## Development Environment
 | 
						|
- Ruby 3.4.2 required
 | 
						|
- Node.js 18 for asset compilation
 | 
						|
- SQLite for development (PostgreSQL supported)
 | 
						|
- Redis for background jobs
 | 
						|
- VIPS for image processing
 | 
						|
 | 
						|
## Testing Setup
 | 
						|
- RSpec for Ruby testing with FactoryBot fixtures
 | 
						|
- Capybara + Cuprite for system/integration tests
 | 
						|
- WebMock for HTTP request stubbing
 | 
						|
- Sidekiq testing utilities for background jobs
 | 
						|
 | 
						|
## Security Features
 | 
						|
- Devise for authentication with 2FA support
 | 
						|
- CanCanCan for authorization
 | 
						|
- PDF signature verification
 | 
						|
- Encrypted configuration storage
 | 
						|
- Rate limiting middleware |