A cutting-edge research platform for Johns Hopkins Bloomberg School of Public Health, specializing in bat virus spillover research, with advanced data management and high-performance visualization capabilities.
- Content Management System: Manage virus categories, publications, team members, and background papers
- Issue Reporting: Built-in error reporting with screenshot capture
- User Management: Role-based access control for administrators
- Data Visualization: High-performance data visualization components
- GraphQL Integration: Proxy interface for Kotahi GraphQL API
- Analytics Dashboard: Track visitor statistics and page views
- Responsive Design: Mobile-friendly interface using Tailwind CSS
- Frontend: React with TypeScript and Tailwind CSS
- UI Components: Customized ShadCN UI library
- State Management: React Query for server state
- Backend: Express.js with TypeScript
- Database: PostgreSQL with Drizzle ORM
- API: RESTful API with GraphQL proxy capabilities
- Deployment: Docker-ready with Replit deployments support
- Node.js 18+ and npm
- PostgreSQL database
-
Clone the repository
git clone https://gitlab.coko.foundation/kotahi/batcom.git cd batcom -
Install dependencies
npm install
-
Set up environment variables Create a
.envfile in the root directory with the following variables:POSTGRES_URL=postgresql://username:password@localhost:5432/database PORT=5120 JWT_SECRET="your-secure-session-secret" JWT_EXPIRES_IN="7d" ADMIN_PASSWORD="temporary-admin-password" -
Initialize the database
npm run db:push
-
Start the development server
npm run dev
-
Open your browser and navigate to
http://localhost:5120
├── client/ # Frontend code
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Page components
│ │ ├── lib/ # Utility libraries
│ │ └── hooks/ # Custom React hooks
├── server/ # Backend code
│ ├── routes.ts # API routes
│ ├── storage.ts # Storage interface
│ ├── db-storage.ts # Database implementation
│ └── index.ts # Server entry point
├── shared/ # Shared code between client and server
│ └── schema.ts # Database schema and types
└── public/ # Static files
The API provides endpoints for managing all aspects of the research platform:
GET /api/virus-categories- Get all virus categoriesGET /api/virus-categories/:id- Get a specific virus categoryPOST /api/virus-categories- Create a new virus categoryPUT /api/virus-categories/:id- Update a virus categoryDELETE /api/virus-categories/:id- Delete a virus category
GET /api/publications- Get all publicationsGET /api/publications/:id- Get a specific publicationPOST /api/publications- Create a new publicationPUT /api/publications/:id- Update a publicationDELETE /api/publications/:id- Delete a publication
GET /api/team-members- Get all team membersGET /api/team-members/:id- Get a specific team memberPOST /api/team-members- Create a new team memberPUT /api/team-members/:id- Update a team memberDELETE /api/team-members/:id- Delete a team memberPOST /api/team-members/reorder- Reorder team members
GET /api/background-papers- Get all background papersGET /api/background-papers/:id- Get a specific background paperPOST /api/background-papers- Create a new background paperPUT /api/background-papers/:id- Update a background paperDELETE /api/background-papers/:id- Delete a background paper
GET /api/issues- Get all issuesGET /api/issues/:id- Get a specific issuePOST /api/issues- Create a new issuePUT /api/issues/:id- Update an issueDELETE /api/issues/:id- Delete an issueGET /api/issues/:issueId/comments- Get comments for an issuePOST /api/issues/:issueId/comments- Create a comment for an issue
GET /api/what-we-do/sections- Get all What We Do sectionsGET /api/what-we-do/sections/:id- Get a specific sectionGET /api/what-we-do/sections/slug/:slug- Get a section by slugPOST /api/what-we-do/sections- Create a new sectionPUT /api/what-we-do/sections/:id- Update a sectionDELETE /api/what-we-do/sections/:id- Delete a section
GET /api/what-we-do/content/section/:sectionId- Get content for a sectionGET /api/what-we-do/content/:id- Get specific contentPOST /api/what-we-do/content- Create new contentPUT /api/what-we-do/content/:id- Update contentDELETE /api/what-we-do/content/:id- Delete contentPOST /api/what-we-do/content/reorder- Reorder content
The application can be deployed on any Node.js hosting platform that supports PostgreSQL.
- Fork the repository on Replit
- Set up environment variables
- Run the database initialization
- Deploy using Replit's deployment feature
-
Build the Docker image
docker build -t bat-com-platform . -
Run the container
docker run -p 5120:5120 -e POSTGRES_URL=your_db_url bat-com-platform
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is proprietary and confidential. Unauthorized copying, transfer, or reproduction of the contents of this repository is prohibited.
© 2025 Adam Hyde. All rights reserved.