Projects

  • Reclaim Details

    Version License AGPLv3 PHP 7.4+ PSR-4

    Take back control of your WordPress plugin’s details display

    Reclaim Details is a zero-configuration library that enables WordPress plugins to display rich "View details" information using local readme.txt files and assets, independent of the WordPress.org repository.

    Why Reclaim Details?

    • Independence: Your plugin details aren’t tied to WordPress.org
    • Control: Use your own readme.txt content and assets
    • WordPress-native: Displays using authentic WordPress.org-style popups
    • Zero config: Auto-detects your plugin, no parameters needed
    • Reusable: Works with any WordPress plugin

    Quick Start

    Installation

    Option 1: Direct Include (Recommended)

    // In your main plugin file or init hook
    require_once 'path/to/reclaim-details/init.php';

    Option 2: Composer

    composer require magicoli/reclaim-details

    Option 3: Manual with Autoloader

    require_once 'path/to/reclaim-details/autoload.php';
    new ReclaimDetailsReclaimDetails();

    That’s It!

    No configuration needed. The library will:

    • Auto-detect your plugin
    • Parse your readme.txt file
    • Add "View details" link to your plugin row
    • Display WordPress.org-style popup with your content

    How It Works

    Before: Generic Plugin Row

    My Awesome Plugin
    A simple description from plugin headers.
    Version 1.0.0 | By Author Name | Visit plugin site

    After: Rich Plugin Details

    My Awesome Plugin  
    A comprehensive description with features and details.
    Version 1.0.0 | By Author Name | Visit plugin site | View details

    Clicking "View details" opens a beautiful WordPress.org-style popup containing all your readme.txt content.

    Required Files

    The library reads from standard WordPress plugin structure:

    your-plugin/
    ├── your-plugin.php        # Main plugin file (auto-detected)
    ├── readme.txt             # WordPress readme format
    └── assets/                # Optional screenshots
        ├── screenshot-1.png
        ├── screenshot-2.jpg
        └── ...

    Example readme.txt

    
    === My Awesome Plugin ===
    Contributors: yourname
    Tags: awesome, plugin
    Requires at least: 5.0
    Tested up to: 6.4
    Requires PHP: 7.4
    Stable tag: 1.0.0
    License: GPL v2 or later

    Short description of your plugin.

    == Description ==

    Detailed description with formatting.

    = Features =

    • Feature one
    • Feature two

    == Installation ==

    1. Upload the plugin
    2. Activate it
    3. Configure settings

    == Changelog ==

    = 1.0.0 =

    • Initial release

    Advanced Usage

    Manual Plugin Specification

    // If auto-detection doesn't work for your setup
    new ReclaimDetailsReclaimDetails('/path/to/your/plugin.php');

    Integration Examples

    In Plugin Constructor:

    
    class MyPlugin {
        public function __construct() {
            add_action('init', [$this, 'init']);
        }

    public function init() { require_once plugin_dir_path(FILE) . ‘lib/reclaim-details/init.php’; // … rest of your init code } }

    Direct in Main Plugin File:

    
    <?php
    /**
     * Plugin Name: My Awesome Plugin
     */

    // Load Reclaim Details require_once DIR . ‘/vendor/magicoli/reclaim-details/init.php’;

    // Your plugin code…

    Supported Content

    Readme Sections

    • Description – Rich formatted content
    • Installation – Step-by-step instructions
    • Changelog – Version history
    • FAQ – Frequently asked questions
    • Screenshots – Automatic asset detection

    Metadata

    • Plugin name, version, author
    • WordPress compatibility (Requires at least, Tested up to)
    • PHP version requirements
    • License information

    Assets

    • Screenshots (assets/screenshot-1.png, etc.)
    • Banners (planned)
    • Icons (planned)

    Technical Details

    Requirements

    • PHP: 7.4 or higher
    • WordPress: 5.0 or higher
    • File: readme.txt in plugin root

    Features

    • PSR-4 Compliant: Proper autoloading
    • Zero Dependencies: Uses only WordPress core functions
    • Smart Detection: Finds plugin files automatically
    • WordPress Native: Uses official plugins_api filter
    • Memory Efficient: Loads only when needed

    Architecture

    lib/reclaim-details/
    ├── composer.json              # Composer package
    ├── init.php                  # One-line integration
    ├── autoload.php             # PSR-4 autoloader
    └── src/Reclaim/Details/
        └── ReclaimDetails.php   # Main class

    Development

    Testing the Library

    
    # Check syntax
    php -l src/Reclaim/Details/ReclaimDetails.php

    Test autoloader

    php -r "require ‘autoload.php’; var_dump(class_exists(‘ReclaimDetailsReclaimDetails’));"

    Integration Testing

    1. Add to your test plugin
    2. Check WordPress admin → Plugins
    3. Look for "View details" in plugin description
    4. Click to verify popup content

    Examples in the Wild

    • OSProjects Plugin – The original implementation
    • Your plugin here! – Submit a PR to add your plugin

    Contributing

    1. Fork the repository
    2. Create your feature branch
    3. Test with multiple plugin setups
    4. Submit a pull request

    License

    This project is licensed under the AGPL-3.0-or-later License – see the LICENSE file for details.

    Acknowledgments

    • capevace for their wp-package-parser which saved me a lot of time… once I found it
    • WordPress core team for the plugins_api system
    • The open source community for inspiration
    • Plugin developers who deserve control over their plugin presentation

    Part of the Reclaim Suite: Taking back control of WordPress plugin independence

    • [x] Reclaim Details – Plugin information display
    • [ ] Reclaim Updates – Plugin update system (coming soon)

    Made with ❤️ by Magìiíc

  • Pick-Up

    Version 2.0.0-beta Stable 1.3.4 License AGPLv3

    A wonderful digital sign for airport pick-ups and meeting people.

    Overview

    Pick-Up is a progressive web application (PWA) designed to create digital signs for airport pick-ups, ride-sharing, and any situation where you need to display someone’s name prominently. The app automatically adjusts text size to make names as large as possible on the screen, ensuring maximum visibility from a distance.

    The basic usage is straightforward. You can use Pickup, free of charge, and/or install it on your device from:

    https://pickup.contact/

    Or read more below to install it on your own servers.

    Features

    • Auto-scaling text: Names automatically resize to fill the available screen space
    • Editable display: Click on any text to edit it directly
    • URL parameters: Pre-fill information using URL query parameters
    • Customizable appearance:
      • Choose from preset logos
      • Custom background colors and images
      • Configurable title and branding
    • Progressive Web App: Can be installed on mobile devices and used offline
    • Full-screen mode: Toggle fullscreen for maximum visibility
    • Responsive design: Works on all screen sizes and orientations
    • Service Worker: Offline functionality with caching

    Quick Start

    Using the Web App

    1. Basic usage: Open index.html in a web browser
    2. Edit names: Click on the displayed name to edit it
    3. Customize: Click the logo to access settings for colors, background, and branding
    4. Install: Use the install button to add to your home screen on mobile devices

    URL Parameters

    You can pre-fill the display using URL parameters:

    https://pickup.contact/?f=John&l=Doe&c=Welcome!

    Available parameters:

    • f: First name
    • l: Last name
    • n: Full name (overrides first/last name)
    • c: Comment/message

    Examples:

    /?f=John&l=Smith
    /?n=Jane Doe&c=Flight AA123
    /?f=Maria&c=Taxi to downtown

    Installation

    As a PWA

    1. Open the app in a mobile browser
    2. Click the "Install" button when it appears
    3. The app will be added to your home screen and can run offline

    Self-hosted

    1. Clone or download this repository
    2. Serve the files from a web server (required for service worker functionality)
    3. Open in a web browser

    File Structure

    ├── index.html          # Main application
    ├── form.html          # Form component (embedded)
    ├── manifest.json      # PWA manifest
    ├── css/
    │   └── style.css      # Main stylesheet
    ├── js/
    │   ├── pickup.js      # Main application logic
    │   └── service-workers.js # PWA service worker
    ├── images/            # Logo assets
    │   ├── pickup-logo-*.png
    │   └── [preset logos]
    └── fonts/             # Gotham font family

    Customization

    Logos

    The app can includes several preset logos: add your own logos to the images/ directory and update the logo selector in the settings.

    Styling

    The main styles are in css/style.css. Key customizable elements:

    • Font family and sizing
    • Colors and backgrounds
    • Layout and spacing
    • Responsive breakpoints

    Configuration

    Settings are stored in browser localStorage:

    • title: Custom page title
    • logo: Selected logo image
    • bgColor: Background color
    • bgImage: Background image

    Browser Support

    • Modern browsers with ES6 support
    • Service Worker support for offline functionality
    • Canvas API for text measurement
    • CSS Grid for layout

    Development

    Local Development

    1. Serve files from a local web server:
      
      # Python 3
      python -m http.server 8000

    Python 2

    python -m SimpleHTTPServer 8000

    Node.js

    npx http-server

    1. Open http://localhost:8000 in your browser

    Version Management

    The app uses version strings throughout for cache busting:

    • Update version in index.html, js/service-workers.js, and manifest.json
    • Use the dev/bump-version script to automate version updates

    Contributing

    1. Fork the repository
    2. Create a feature branch
    3. Make your changes
    4. Test across different devices and browsers
    5. Submit a pull request

    License

    This project is licensed under the GNU Affero General Public License v3.0 (AGPLv3). See the LICENSE file for details.

    Changelog

    See CHANGELOG.md for version history and updates.

    Support

    For issues and feature requests, please use the project’s issue tracker.


    Perfect for:

    • Airport pickups
    • Ride-sharing meetups
    • Event registration
    • Hotel shuttles
    • Conference attendee pickup
    • Any situation where you need a clear, visible name display
  • Casting Director Tools

    A collection of handy tools for casting directors. Very small for now but I have great expectations.

  • WooPUS

    Sell plugin licenses and synchronize the license keys with Plugin Update Server.

  • Open Source Projects for WordPress

    Version 1.0.0 Stable 1.0.0 WordPress 5.0+ PHP 7.4+ License AGPLv3

    A comprehensive WordPress plugin for showcasing and managing open source projects with automated GitHub integration, project metadata management, and multilingual support.

    Features

    Core Functionality

    • Custom Post Type: Dedicated project post type for organizing open source projects
    • GitHub Integration: Automated import and synchronization of GitHub repositories
    • Project Metadata: Automatic extraction of project details (license, latest release, last commit, etc.)
    • Taxonomies: Project categories and tags for better organization
    • Multi-language Support: Built-in internationalization with French translations included

    GitHub Import System

    • Bulk Repository Import: Import multiple repositories from any GitHub user/organization
    • Smart Duplicate Detection: Prevents importing existing projects and handles redirects
    • Pagination Support: Handles users with large numbers of repositories (up to 1000)
    • Selective Import: Choose which repositories to import with visual interface
    • Status Management: Automatic handling of ignored/problematic repositories

    Project Management

    • Automated Metadata Updates: Regular synchronization of project data from Git repositories
    • Custom Project Status: Support for ignored projects with dedicated status
    • Rich Project Display: Automatic project information display with customizable templates
    • AJAX-powered Updates: Real-time project metadata fetching in admin interface
    • Gutenberg Compatible: Full support for block editor with classic editor fallback

    Admin Interface

    • Dedicated Admin Menu: Complete admin interface under "Open Source Projects"
    • Repository Importer: WordPress-integrated importer for GitHub repositories
    • Batch Operations: Bulk actions for managing multiple projects
    • Filter & Search: Advanced filtering by categories, status, and project attributes
    • Manual Refresh: On-demand project metadata refresh with progress tracking

    Screenshots

    1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from the /assets directory or the directory that contains the stable readme.txt (tags or trunk). Screenshots in the /assets directory take precedence. For example, /assets/screenshot-1.png would win over /tags/4.3/screenshot-1.png (or jpg, jpeg, gif).
    2. This is the second screen shot

    Requirements

    • WordPress: 5.0 or higher
    • PHP: 7.4 or higher
    • Dependencies:
      • czproject/git-php (included) – Git repository interaction
      • erusev/parsedown (included) – Markdown parsing

    Installation

    See INSTALLATION.md for detailed installation and configuration instructions.

    Usage

    Importing GitHub Repositories

    Method 1: WordPress Importer (Recommended)

    1. Go to Tools > Import in WordPress admin
    2. Select OSProjects Importer
    3. Enter a GitHub user/organization URL (e.g., https://github.com/username)
    4. Click Check to fetch available repositories
    5. Select repositories to import and click Import

    Method 2: Direct Import Page

    1. Navigate to Open Source Projects > Import
    2. Follow the same process as above

    Managing Projects

    Project Categories

    • Create and manage project categories under Open Source Projects > Project Categories
    • Hierarchical taxonomy supports nested categories
    • Bulk categorization available in project list

    Project Status

    • Published: Publicly visible projects
    • Draft: Projects in development
    • Ignored: Projects excluded from public display (automatic for problematic repositories)

    Manual Metadata Refresh

    1. Go to Open Source Projects > Settings
    2. Click Refresh all projects now
    3. Monitor progress on the dedicated refresh page

    Displaying Projects

    Archive Page

    Projects are automatically available at /projects/ (or your configured URL prefix)

    Single Project Pages

    Each project displays:

    • Latest release information
    • Last commit details
    • Repository link
    • Official website (if available)
    • License information
    • Project description

    Custom Templates

    Override default templates by creating files in your theme:

    • single-project.php – Single project template
    • archive-project.php – Projects archive template

    Troubleshooting

    GitHub API Rate Limiting

    • Problem: Import fails with rate limit errors
    • Solution: Add GitHub API token as described above

    For users with many repositories, you may encounter GitHub API rate limits. To increase limits:

    1. Create a personal access token at https://github.com/settings/tokens
    2. No special permissions needed for public repositories
    3. Set the token using WP-CLI:
      wp option update osprojects-settings --format=json '{"github_api_token":"your_token_here"}'

    Repository Access Errors

    • Problem: Projects marked as ignored
    • Solution: Check repository URLs and access permissions

    Memory Issues with Large Imports

    • Problem: PHP memory limit exceeded
    • Solution: Increase PHP memory limit or import in smaller batches

    Gutenberg Save Issues

    • Problem: Project saves hang in Gutenberg editor
    • Solution: Try clearing browser cookies or disable Gutenberg in plugin settings

    Debug Mode

    Enable WordPress debug mode to see detailed error messages:

    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);

    Development

    For developers interested in contributing or customizing the plugin, see DEVELOPERS.md for detailed development information.

    License

    This plugin is licensed under the AGPL-3.0-or-later license.

    Support

    Roadmap

    Planned Features

    • GitLab Integration: Support for GitLab repositories
    • Bitbucket Support: Bitbucket repository import
    • Project Analytics: Download and activity tracking
    • Advanced Filters: More sophisticated project filtering options
    • REST API: Full REST API for external integrations
    • Shortcode Support: Display projects via shortcodes
    • Widget Support: Project widgets for sidebars

    Made with care by Magìiíc

  • W.R.A.P. – Web Reel Automated Publishing

    The W.R.A.P. plugin is a complement to W.R.A.P. by Magiiic platform, an online video-centric publishing service that includes fast processing, optimized streaming, editing, and organizing of provided content.

    This plugin serves as the administration tool for the service, allowing the management of user authentication on the external platform, groups (clients, companies, etc.), and projects.

    Although the plugin was created to complement a specific application, it has been designed generically to adapt to other third-party applications, assuming they are based on the use of subdirectories of the website.

    Features

    At this stage, the service provides:

    • Authentication API: Manage user authentication on the external platform, allowing a standalone application to benefit from WordPress user management.
    • Group Management: Organize users into groups (could be clients, companies, etc.) and manage their access.

    Roadmap

    • Project Management: Assign new projects to groups, show projects on group page.
    • Full Wrap libary: Integrate the current standalone Wrap project into the plugin.

    Requirements

    • A third-party web application or a part of the website not handled by WordPress, relying on document root subfolders.
    • WordPress should be installed in a subdirectory. Although not mandatory, a subfolder is a better approach for clarity and maintenance.

    This ensures that WordPress handles only the calls to its own structure and permalinks, while existing folders and files outside the WordPress directory are handled directly by the web server or the third-party application.

    Example File Structure

    Here is an example of how your file structure might look:

    /var/www/html/
    ├── wp/ # WordPress installed in a subdirectory
    │   ├── wp-content/
    │   └── ...
    ├── group1/ # Third-party application protected group
    │   ├── .htaccess # Authentication rules for group1
    │   ├── project1/
    │   └── project2/
    ├── group2/ # Third-party application public group
    │   ├── project1/
    │   ├── project2/
    │   └── private/ # Protected subdirectory
    │   └── .htaccess # Authentication rules subdirectory
    └── ...

    Installation

    1. Upload the plugin files to the wp-content/plugins/wrap directory, and activate as usual plugins.
    2. Go to Admin->WRAP->Settings screen to set the base URL of your external app (could be http://yourdomain.org/ or http://yourdomain.org/myapp/), and its local path (/var/www/html/ or /var/www/html/myapp/).
    3. Create groups, and assign allowed WP users.
    4. In the folders you want authentication, add a .htaccess file with the rules provided in the related group edit page, or adjust the example here:
      <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_COOKIE} !wrap_auth_your-group=1
        RewriteRule ^(.*)$ https://yourdomain.org/wrap-auth/?redirect_to=%{REQUEST_SCHEME}://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
      </IfModule>

      The first part of the URL must match an existing group, but the .htaccess file can be anywhere inside this group path (e.g., you can either protect the whole yourdomain.org/group1/ subsite, or leave it public and restrict access only to yourdomain.org/group1/private/).

    Usage

    Users visiting a page of the third-party app will be redirected if needed to the WP login page, and brought back to the page requested on success, otherwise get an error message.

    WordPress users have a profile page, where they can see the groups they belong to.

  • Web Reel Automated Publishing: it’s a W.R.A.P

    Wrap is a basic CMS, aimed to display mostly galleries of images or videos. The idea is to allow the website maintainer to push media in subfolders. The structure of the websites and the menus is detected automatically.

    It is not intended to be a full-featured CMS. Instead, it allows to automatically publish videos and pictures playlists.

    It is designed for fast, efficient media transmission. Although it is possible to make a pretty beautiful website with this system (and I did), it’s not the goal.

    It is poorly documented, but it works now with PHP7 (and probably 8).

    Installation

    • VERY IMPORTANT: Put this project outside your web directory. It contains unprotected scripts and tools aimed to alter your disk content
    • bin/ tools are not needed for web publishing. They are used to manipulate video files. If you only need to publish ready to use files, you can safely (and should) remove bin/ folder
    • In your apache config, add alias, rules and wrap.php as DirectoryIndex:
      
      Alias /wrap/ /opt/wrap/
      DirectoryIndex index.php index.html /wrap/wrap.php

    <Directory /opt/wrap/> <IfVersion < 2.3> Order allow,deny Allow from all

    = 2.3> Require all granted
    AllowOverride All

    
    * you can place wrap.css and wrap.html in your web root folder to customize layout
    * use themes/bootstrap/page-template.html as base for wrap.html and be sure to
      include all needed shortcodes
    * More on this later...
  • WP Package Updater – composer-ready library

    Used to enable updates for plugins and themes distributed via WP Plugin Update Server.

  • WooCommerce Virtual Less Fields

    Remove address fields on WooCommerce checkout page for orders with only virtual products.

    Ignores products identified as domain names with WooCommerce Domain Names plugin.

  • Apache Logs Monitor for VS Code

    A simple VS Code extension to monitor Apache error logs in the Debug Console.

    Version: 1.0.0-beta3 VS Code: 1.74+ License: ISC

    What it does

    • Shows Apache error logs in VS Code Debug Console
    • Finds Apache sites automatically from /etc/apache2/sites-enabled/
    • Lets you switch between different site logs
    • Basic commands: select, all, stop, list

    Installation

    Quick install (recommended):

    No need to clone the repository, the install script will fetch the needed files.

    curl -fsSL https://raw.githubusercontent.com/magicoli/vscode-apache-logs-monitor/master/install.sh | bash

    Usage

    In the Debug Console, type:

    • select(1,2,3) – pick specific sites to monitor by number
    • all() – show logs from all sites
    • stop() – stop monitoring
    • list() – show available sites

    Requirements

    • Apache with standard Debian/Ubuntu config layout
    • Access to /etc/apache2/sites-enabled/ and log files
    • May need sudo for log file access

    Example

    
    [14:30:45] Starting Apache Logs Monitor...
    [14:30:45] Found sites: example.com, api.example.com
    [14:30:45] Monitoring: /var/log/apache2/example.com_error.log

    select

    1. example.com – /var/log/apache2/example.com_error.log
    2. api.example.com – /var/log/apache2/api.example.com_error.log Choose [1-2]: 2

    [14:31:02] Switching to: api.example.com [14:31:02] [error] [client 192.168.1.100] PHP Notice: Undefined variable

    Development

    git clone https://github.com/magicoli/vscode-apache-logs-monitor.git
    cd vscode-apache-logs-monitor
    npm install
    npm run compile
    npx vsce package

    Use ./dev.sh build to rebuild or ./dev.sh watch for auto-rebuild.

    Notes

    • This is a basic utility extension for Apache log monitoring
    • Works with standard Apache configurations on Debian/Ubuntu
    • For remote servers, install the extension on each server (not your local machine)
    • Uses VS Code’s Debug Adapter Protocol for console integration

    License

    ISC License – see LICENSE file.