https://github.com/schroedinger-hat/certo
An open source project for courses, workshop and conference organiser to create certification using Open Badges 3.0
https://github.com/schroedinger-hat/certo
Last synced: 4 months ago
JSON representation
An open source project for courses, workshop and conference organiser to create certification using Open Badges 3.0
- Host: GitHub
- URL: https://github.com/schroedinger-hat/certo
- Owner: Schroedinger-Hat
- License: agpl-3.0
- Created: 2025-06-09T17:41:09.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-06-12T15:08:54.000Z (4 months ago)
- Last Synced: 2025-06-13T05:17:02.760Z (4 months ago)
- Language: TypeScript
- Size: 488 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Certo
Certo is a digital certificate platform for issuing, managing, and verifying badges and credentials based on the [Open Badges 3.0](https://www.imsglobal.org/spec/ob/v3p0/) specification.
## Features
- Issue digital certificates for workshops, courses, events, and projects
- Verify badge authenticity using the Verifiable Credentials model
- Share certificates on social platforms like LinkedIn
- View and manage issued badges
- Support for the Open Badges 3.0 protocol## Project Structure
```
certo/
├── src/
│ ├── backend/ # Strapi backend (TypeScript)
│ │ ├── src/ # Backend source (APIs, utils, admin, etc.)
│ │ ├── config/ # Strapi configuration
│ │ ├── public/ # Static files
│ │ ├── types/ # TypeScript types
│ │ ├── scripts/ # Utility scripts
│ │ ├── database/ # Database config/data
│ │ ├── Dockerfile # Backend Docker configuration
│ │ ├── package.json # Backend dependencies
│ │ ├── tsconfig.json # TypeScript configuration
│ │ └── ... # Other backend files
│ │
│ ├── frontend/ # Nuxt 3 frontend (Vue 3 + Una UI)
│ │ ├── assets/ # Static assets
│ │ ├── components/ # Vue components
│ │ ├── layouts/ # Nuxt layouts
│ │ ├── middleware/ # Nuxt middleware
│ │ ├── pages/ # Nuxt pages
│ │ ├── plugins/ # Nuxt plugins
│ │ ├── stores/ # Pinia stores
│ │ ├── types/ # TypeScript types
│ │ ├── api/ # API clients
│ │ ├── public/ # Public static files
│ │ ├── nuxt.config.ts # Nuxt configuration
│ │ ├── package.json # Frontend dependencies
│ │ ├── tsconfig.json # TypeScript configuration
│ │ ├── Dockerfile # Frontend Docker configuration
│ │ └── ... # Other frontend files
│ │
│
├── docker-compose.yml # Docker configuration
├── README.md # Project documentation
├── LICENSE # License file
└── docs/ # Additional documentation
```## Requirements
- Node.js 18+ and npm
- Docker and Docker Compose
- PostgreSQL (included in Docker setup)## Development Setup
1. Clone the repository:
```bash
git clone https://github.com/schrodinger-hat/certo.git
cd certo
```2. Create environment variables:
Create a `.env` file in the root directory with the following variables:
```
ADMIN_JWT_SECRET=your-admin-jwt-secret
JWT_SECRET=your-jwt-secret
```3. Start the Docker containers:
```bash
docker-compose up -d
```This will start the backend (Strapi), frontend (Nuxt 3), and PostgreSQL database.
4. Access the applications:
- Backend (Strapi Admin): http://localhost:1337/admin
- Frontend (Nuxt 3): http://localhost:3000## Running Locally (Without Docker)
If you prefer to run the applications locally without Docker:
### Backend (Strapi)
```bash
cd src/backend
npm install
npm run develop
```### Frontend (Nuxt 3)
```bash
cd src/frontend
npm install
npm run dev
```## API Documentation
The API follows the Open Badges 3.0 specification. You can access the Strapi API documentation at http://localhost:1337/documentation after enabling the Swagger plugin.
Key endpoints:
- `/api/credentials`: Credential management
- `/api/profiles`: Profile management
- `/api/achievements`: Achievement management## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request## License
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.
## Acknowledgments
- [Open Badges 3.0 Specification](https://www.imsglobal.org/spec/ob/v3p0/)
- [Verifiable Credentials Data Model](https://www.w3.org/TR/vc-data-model/)
- [Strapi](https://strapi.io/)
- [Nuxt 3](https://nuxt.com/)
- [Una UI](https://una-ui.vercel.app/)
- [Schrödinger Hat](https://www.schrodinger-hat.it/)