Free, Open-Source Legal Citation Validation Tool
CiteSight is a free, self-hosted web application that helps legal professionals validate citations quickly and accurately using the CourtListener API. Users bring their own API keys - no SaaS subscription required. Built for solo practitioners, small law firms, and legal researchers who need reliable citation checking.
- Smart Citation Validation: Automatically validates legal citations against the CourtListener database
- PDF Text Extraction: Upload PDFs and extract citations automatically via LlamaParse
- Traffic Light System: Visual status indicators (Valid, Warning, Invalid)
- PDF Report Generation: Export validation results as professional PDF reports
- Self-Hosted: Bring your own API keys, no external accounts required
- Responsive Design: Works seamlessly on desktop and mobile devices
- React 18.3 - UI framework
- TypeScript 5.8 - Type safety
- Vite - Build tool and dev server
- Tailwind CSS - Styling
- shadcn/ui - Component library
- React Router - Client-side routing
- TanStack Query - Data fetching and caching
- CourtListener API - Citation validation data source (free tier: 5000 requests/hour)
- LlamaParse - Cloud PDF extraction service (optional, free tier: 1000 pages/day)
- Cloudflare Turnstile - Bot protection (optional)
- Node.js 18+ and npm (or bun)
- CourtListener API Key - Get one here (free, 5000 requests/hour)
- Clone the repository
git clone https://github.com/JaySmith502/cite-sight.git
cd cite-sight- Install dependencies
npm install- Set up environment variables
Copy .env.example to .env.local and fill in your credentials:
cp .env.example .env.localRequired variables:
# CourtListener API
VITE_COURTLISTENER_API_KEY=your_courtlistener_api_keyOptional variables:
# Cloudflare Turnstile (bot protection)
VITE_TURNSTILE_SITE_KEY=your_site_key
TURNSTILE_SECRET_KEY=your_secret_key
# LlamaParse (cloud PDF extraction)
# Get your key at: https://cloud.llamaindex.ai
VITE_LLAMA_CLOUD_API_KEY=your_llama_cloud_api_key- Start the development server
npm run devThe app will be available at http://localhost:5173
The easiest way to deploy CiteSight is with Docker:
- Clone the repository
git clone https://github.com/JaySmith502/cite-sight.git
cd cite-sight- Create your environment file
cp .env.example .envEdit .env and add your CourtListener API key:
VITE_COURTLISTENER_API_KEY=your_api_key_here- Build and run
docker-compose up --build- Access the application
Open http://localhost:3000 in your browser.
| Variable | Required | Default | Description |
|---|---|---|---|
VITE_COURTLISTENER_API_KEY |
Yes | - | Your CourtListener API key |
VITE_BUILD_MODE |
No | self-hosted |
Build mode (self-hosted or marketing) |
VITE_LLAMA_CLOUD_API_KEY |
No | - | LlamaParse API key for PDF extraction |
CITESIGHT_PORT |
No | 3000 |
Port to expose on host |
CiteSight uses LlamaParse for PDF text extraction. To enable PDF uploads:
- Get a free API key at cloud.llamaindex.ai
- Add to your .env file:
VITE_LLAMA_CLOUD_API_KEY=your_api_key_here
- Rebuild the container:
docker-compose up --build
Free tier limits: 1000 pages/day (sufficient for most individual users)
Without an API key, users can still paste text manually - the app gracefully degrades.
Since VITE_ variables are baked at build time, you must rebuild after changing them:
docker-compose up --build- The default image is ~50-80MB (nginx:alpine based)
- Container runs as non-root user for security
- Health check endpoint available at
/health - Use
restart: unless-stoppedfor automatic restarts
CourtListener API has rate limits (5000 requests/hour for free accounts). CiteSight implements:
- Client-side rate limiting (55 requests/minute)
- Exponential backoff on 429 errors
- Request queuing for large documents
cite-sight-check/
├── src/
│ ├── components/ # React components
│ ├── pages/ # Page components
│ ├── hooks/ # Custom React hooks
│ ├── services/ # API services
│ ├── utils/ # Utility functions
│ └── lib/ # Shared libraries
├── public/ # Static assets
└── dist/ # Build output
npm run dev # Start development server
npm run build # Build for production
npm run build:dev # Build with development mode
npm run preview # Preview production build
npm run lint # Run ESLintThe app supports different build modes:
development- Full logging, development featuresproduction- Optimized build, minimal logging
CiteSight can be deployed to any static hosting platform (Netlify, Vercel, Cloudflare Pages):
- Set build command:
npm run build - Set publish directory:
dist - Add environment variables in the platform dashboard
The included netlify.toml configures SPA routing and security headers.
- No hardcoded credentials (all via environment variables)
- Input validation with Zod schemas
- Content Security Policy headers
- HTTPS-only in production
- Rate limiting on API calls
- Never commit
.env.localor any file containing secrets - Rotate API keys regularly
- Review
netlify.tomlCSP headers for your domain
See SECURITY.md for reporting vulnerabilities.
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run linting (
npm run lint) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE.md file for details.
- CourtListener - Free Law Project for providing the citation API
- LlamaParse - LlamaIndex for the document parsing API
- shadcn/ui - For the beautiful component library
- Tailwind CSS - For the utility-first CSS framework
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Batch citation validation API
- Citation format auto-correction
- Bluebook vs. ALWD format detection
- Integration with legal research platforms
- Browser extension for in-page validation
- Multi-language support
CiteSight is a tool to assist with citation validation and should not be considered a substitute for professional legal research or verification. Always verify critical citations manually. This software is provided "as is" without warranty of any kind.
Built for the legal community