Skip to Content
developmentGetting Started

Last Updated: 3/8/2026


Development Guide

Getting Started with LinkAce Development

This guide will help you set up a local development environment for contributing to LinkAce.

Prerequisites

Required Software

  • Docker & Docker Compose: For containerized development
  • Git: Version control
  • Node.js: v16 or higher (for frontend assets)
  • Composer: PHP dependency manager (if developing without Docker)

Optional Tools

  • PHP 8.1+: For local development without Docker
  • MySQL 8.0+ or PostgreSQL 12+: Database (if not using Docker)
  • Redis: For caching and queues (optional)

Setting Up Development Environment

1. Clone the Repository

git clone https://github.com/Kovah/LinkAce.git cd LinkAce

2. Choose Your Development Method

Start the development environment:

docker-compose up -d

This will start:

  • Application container (PHP-FPM + Nginx)
  • MySQL database
  • Redis (optional)

Install dependencies:

# PHP dependencies docker-compose exec app composer install # JavaScript dependencies npm install

Run migrations:

docker-compose exec app php artisan migrate

Compile frontend assets:

npm run dev

Access the application:

Option B: Local PHP Development

Install dependencies:

composer install npm install

Configure environment:

cp .env.example .env php artisan key:generate

Edit .env with your database credentials.

Run migrations:

php artisan migrate

Start development server:

php artisan serve

Compile assets:

npm run dev

Project Structure

LinkAce/ ├── app/ # Application code │ ├── Console/ # CLI commands │ ├── Http/ # Controllers, middleware │ ├── Models/ # Eloquent models │ ├── Repositories/ # Data access layer │ └── Services/ # Business logic ├── config/ # Configuration files ├── database/ # Migrations and seeders │ ├── migrations/ │ └── seeders/ ├── lang/ # Translations ├── public/ # Public assets ├── resources/ # Views and raw assets │ ├── assets/ # JS, CSS source files │ └── views/ # Blade templates ├── routes/ # Route definitions │ ├── api.php # API routes │ └── web.php # Web routes ├── storage/ # Logs, cache, uploads └── tests/ # Test suite ├── Feature/ └── Unit/

Development Workflow

Making Changes

  1. Create a feature branch:

    git checkout -b feature/your-feature-name
  2. Make your changes following the coding standards

  3. Test your changes:

    # Run PHP tests php artisan test # Run specific test php artisan test --filter=TestName
  4. Check code style:

    # PHP CodeSniffer ./vendor/bin/phpcs # Auto-fix issues ./vendor/bin/phpcbf
  5. Commit your changes:

    git add . git commit -m "feat: add new feature"

Frontend Development

Watch for changes (auto-recompile):

npm run watch

Build for production:

npm run production

Linting:

npm run lint

Database Changes

Create a new migration:

php artisan make:migration create_something_table

Run migrations:

php artisan migrate

Rollback last migration:

php artisan migrate:rollback

Refresh database (drop all tables and re-migrate):

php artisan migrate:fresh

Seed database with test data:

php artisan db:seed

Working with Queues

Start queue worker:

php artisan queue:work

Process failed jobs:

php artisan queue:retry all

Testing

Running Tests

All tests:

php artisan test

With coverage:

php artisan test --coverage

Specific test file:

php artisan test tests/Feature/LinkTest.php

Writing Tests

Feature test example:

namespace Tests\Feature; use Tests\TestCase; use App\Models\User; class LinkTest extends TestCase { public function test_user_can_create_link() { $user = User::factory()->create(); $response = $this->actingAs($user)->post('/links', [ 'url' => 'https://example.com', 'title' => 'Test Link' ]); $response->assertStatus(201); $this->assertDatabaseHas('links', [ 'url' => 'https://example.com' ]); } }

Debugging

Laravel Telescope

Telescope is available in development mode:

Debug Bar

The debug bar appears at the bottom of pages in development.

Logging

View logs:

tail -f storage/logs/laravel.log

Log levels:

  • Log::debug() - Detailed debug information
  • Log::info() - Interesting events
  • Log::warning() - Exceptional occurrences
  • Log::error() - Runtime errors

Coding Standards

PHP

  • Follow PSR-12 coding style
  • Use type hints and return types
  • Write descriptive variable and method names
  • Add PHPDoc blocks for classes and methods
  • Keep methods focused (single responsibility)

JavaScript

  • Use ES6+ syntax
  • Follow consistent formatting
  • Add comments for complex logic

Blade Templates

  • Use @ directives for control structures
  • Escape output with {{ }} by default
  • Use {!! !!} only for trusted HTML

Contributing

Before submitting a pull request:

  1. Read CONTRIBUTING.md 
  2. Ensure all tests pass
  3. Follow the code style guidelines
  4. Update documentation if needed
  5. Write clear commit messages

Commit Message Format

type(scope): subject body (optional) footer (optional)

Types:

  • feat: New feature
  • fix: Bug fix
  • docs: Documentation changes
  • style: Code style changes
  • refactor: Code refactoring
  • test: Adding tests
  • chore: Maintenance tasks

Translations

LinkAce uses Crowdin for translations:

Resources

Getting Help

If you need help:

  1. Check existing GitHub Discussions 
  2. Search closed issues 
  3. Ask in the community discussions
  4. For supporters: Get dedicated help via Open Collective , Patreon , or GitHub Sponsors