Skip to content

Schroedinger-Hat/certo

Repository files navigation

Certo

Certo is a digital certificate platform for issuing, managing, and verifying badges and credentials based on the Open Badges 3.0 specification.

Certo Open Graph Image

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:
git clone https://github.com/schrodinger-hat/certo.git
cd certo
  1. 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
  1. Start the Docker containers:
docker-compose up -d

This will start the backend (Strapi), frontend (Nuxt 3), and PostgreSQL database.

  1. Wait for the containers to initialize. On first run, the backend will automatically:
    • Create sample data for testing
    • Configure all necessary API permissions

Default login credentials (same for admin panel and frontend):

  • Email: admin@certo.com
  • Password: certo

Sample data includes:

  • A Strapi admin user (for the admin panel at /admin)
  • An API user (for frontend authentication)
  • A profile (configured as both Issuer and Recipient)
  • A sample achievement ("Welcome to Certo")
  • A sample credential/badge awarded to the admin user

Permissions automatically configured:

  • Authenticated users can access all API endpoints (profiles, achievements, credentials, etc.)
  • Public users can read and verify badges

Note: Seed data is only created on the first run. If you need to reset the database, run docker-compose down -v to remove volumes, then start again.

  1. Access the applications:

Running Locally (Without Docker)

If you prefer to run the applications locally without Docker:

Backend (Strapi)

cd src/backend
npm install
npm run develop

Frontend (Nuxt 3)

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

Maintainers

Miki Lombardi
Miki Lombardi

💻 Maintainer
Patrick Raedler
Patrick Raedler

💻 Maintainer
Lorenzo Bugli
Marco Giuliotti

💻 Maintainer

About

An open source project for courses, workshops and conferences organizers to create certifications using Open Badges 3.0

Topics

Resources

License

Code of conduct

Contributing

Stars

21 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors