Equalify is an open-source project under the AGPL license. We welcome contributions from the community!
- Node.js 22.x
- npm
- AWS CLI v2 (for deployment)
- Git
git clone https://github.com/equalifyEverything/equalify.git
cd equalifyThe project uses npm workspaces:
npm installThis installs dependencies for all workspaces:
apps/frontendapps/backendservices/aws-lambda-scan-htmlservices/aws-lambda-scan-pdfservices/aws-lambda-verapdf-interfaceservices/aws-lambda-scan-sqs-routershared/types
services/aws-lambda-crawler has its own separate package.json/lockfile and is not currently part of the root npm workspace.
cd apps/frontend
npm run start:stagingThis starts Vite dev server at http://localhost:5173 connected to staging APIs.
The backend runs on AWS Lambda, so local development requires:
- Make code changes
- Deploy to staging:
npm run build:staging - Test via staging frontend or API calls
- Create a feature branch
- Make and test changes locally
- Deploy to staging environment
- Verify functionality works correctly
- Submit a pull request
equalify/
├── apps/
│ ├── backend/ # API Lambda
│ │ ├── routes/ # API endpoints
│ │ │ ├── auth/ # Authenticated endpoints
│ │ │ ├── public/ # Public endpoints
│ │ │ ├── internal/ # Internal endpoints
│ │ │ └── scheduled/# Scheduled tasks
│ │ └── utils/ # Shared utilities
│ └── frontend/ # React application
│ └── src/
│ ├── components/
│ ├── routes/
│ ├── queries/
│ └── hooks/
├── services/ # Scanning microservices
│ ├── aws-lambda-crawler/
│ ├── aws-lambda-scan-sqs-router/
│ ├── aws-lambda-scan-html/
│ ├── aws-lambda-scan-pdf/
│ └── aws-lambda-verapdf-interface/
├── shared/ # Shared code
│ ├── types/ # TypeScript types
│ └── convertors/ # Result converters
├── db/ # PostgreSQL schema, migrations, Hasura metadata
├── infrastructure/ # Terraform-managed AWS infrastructure
└── scripts/ # Deployment scripts
- Use TypeScript for all new code
- Enable strict mode
- Use explicit types for function parameters and return values
- Files: camelCase for utilities, PascalCase for components
- Functions: camelCase
- Components: PascalCase
- Constants: UPPER_SNAKE_CASE
- Use functional components with hooks
- Use SCSS Modules for styling
- Use Radix UI primitives for accessible components
- Follow React 19 best practices
- Keep route handlers focused and small
- Use utility functions for shared logic
- Always clean up database connections
- Handle errors gracefully with appropriate status codes
-
Create handler in appropriate route folder:
// apps/backend/routes/auth/myFeature.ts import { db, event } from '#src/utils'; export const myFeature = async () => { // Implementation };
-
Export from route index:
// apps/backend/routes/auth/index.ts export { myFeature } from './myFeature';
-
The router automatically maps the export name to the endpoint.
-
Create page component:
// apps/frontend/src/routes/MyPage.tsx export const MyPage = () => { return <div>My Page</div>; };
-
Export from routes index:
// apps/frontend/src/routes/index.ts export { MyPage } from './MyPage';
-
Add route in App.tsx router configuration.
- Create service directory in
services/ - Implement SQS message handler
- Create result converter in
shared/convertors/ - Add queue routing in
aws-lambda-scan-sqs-router - Update type definitions in
shared/types/
As an accessibility tool, Equalify must meet high accessibility standards:
- All features must be keyboard navigable
- Use semantic HTML elements
- Include proper ARIA attributes where needed
- Ensure sufficient color contrast
- Test with screen readers
- Follow WCAG 2.1 AA guidelines
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes with clear messages
- Push to your fork
- Open a pull request against
main
- Clear description of changes
- Tests pass (if applicable)
- No accessibility regressions
- Code follows project style
- Documentation updated if needed
Use GitHub Issues for:
- Bug reports
- Feature requests
- Documentation improvements
Include:
- Clear description
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Environment details
- GitHub Issues for technical questions
- Subscribe to newsletter: it.uic.edu/accessibility/engineering
Equalify is licensed under AGPL-3.0. Contributions are subject to the same license.
For architecture details, see the Architecture Overview.