Taking part

Posting, replying, following and finding your way around.

How do I get notified when someone replies? Press Follow on a topic, forum or club and new activity in it reaches your notifications. You follow anything you post in automatically, and Unfollow stops it without deleting anything you wrote. Members Can I change my username? Yes, in Settings, unless the administrator has switched it off or you have changed it recently. Your old name is held for a while so nobody else can take it and be mistaken for you. Members Why can I no longer edit my post? Editing is usually allowed for a set time after posting, and the window is the administrator's choice. Once it closes you can ask a moderator, who is never limited by it. Members How do I message another member privately? Open their profile and press Message, or start one from the messenger. You can add more people to a conversation afterwards, and everybody added sees what was said before they arrived. Members How do I search this site properly? The box in the header searches everything you are allowed to see — topics, posts, files, articles and more. The full results page lets you narrow by kind, by author and by where it was posted. Members What are clubs and how do I join one? A club is a space run by members, with its own forums, photographs and events that only its members can see. Some you join instantly, some need a leader to approve you, and some are invitation only. Members How do I download my own data? Settings → Privacy has a button that builds a file of everything the site holds about you. It is prepared in the background and you are told when it is ready. Members What happens to my posts if I delete my account? Your account and personal details go. What happens to your posts is the administrator's policy — usually they stay, with your name removed, because deleting them would tear holes in conversations other people took part in. Members

Groups and permissions

Who can see what, and how Convoro decides.

How do permissions work? Everything is restricted to groups. A thing with no groups ticked is visible to everybody; tick some and only those groups can see it. Signed-out visitors count as being in the Guests group rather than in no group at all. Administrators How do I make a forum only staff can see? Edit the forum, and under "Who may read it" tick the groups allowed in. Everything follows — the index, search, activity, streams and widgets all stop showing it to everybody else. Administrators What happens when I delete a member group? Its members move to the default group so nobody is left without one, and every restriction pointing at it is removed. Without that second part, a page restricted to a group that no longer exists is restricted to nobody. Administrators Why can I not see club groups in Admin → Groups? Every club owns an automatic group, which is how its content is kept to its members. They are hidden from the Groups screen and from every "who may read this" list on purpose, and cannot be picked as ordinary groups. Administrators Can I get back a topic somebody deleted? Yes. Admin → Deleted content holds soft-deleted topics, posts and application content, and you can restore them. Uploaded files are kept too, so a restored image is not a broken one. Administrators What is the difference between hiding and deleting a post? Hiding takes it off the page but leaves it readable by moderators, so there is a record of what was said. Deleting removes it for everybody, moderators included, and is recoverable from Deleted content. Administrators

Applications

Forums, Downloads, Pages, Blog, Events, Gallery, the Knowledge Base and Clubs.

What is the difference between System and an application? System is the core — members, groups, search, widgets, the messenger — and is always there. The eight applications sit on top of it and can each be switched off, so a Downloads-only or Gallery-only site works properly. Administrators How do I charge for a download? Set a price on the file in Admin → Downloads. Convoro takes payment through PayPal, grants access when the payment settles, and can charge a renewal on a schedule if you set one. Administrators How do I use my own page as the home page? Admin → Modules has a "Make front page" button beside each application that is switched on. Only its index moves; every other address keeps working. Administrators When should I use a Pages database instead of a forum? Use one when your content has fields — a directory of members' businesses, a list of servers, a recipe collection. A forum is for conversation; a database is for records people browse and filter. Administrators Are gallery images safe? Do they keep their location data? Every uploaded image is decoded and written out again, so nothing hidden inside the original survives — and that also strips the EXIF, including the GPS coordinates most phones record. Administrators How do clubs work and who runs them? Members create and run clubs themselves. Each gets its own group, and its forum, album, calendar and blog are restricted to that group. Your admin screen is for oversight, not for running them. Administrators How should I structure Knowledge Base articles? One answer per article, self-contained, titled as the question somebody would type. Fill in the question and summary fields — they are what search and the assistant use, and a summary sliced off the body is not an answer. Administrators

Installing and operating

Getting Convoro running, keeping it running, and what needs a schedule.

Convoro installed and the front page works, but every link 404s. Why? Your web server is not rewriting URLs, so only the front page ever reaches PHP. Convoro can work without rewriting — add <code>'URL_REWRITING' => 'off'</code> to <code>config/site.php</code> and every address will carry <code>index.php</code>. Turning rewriting on is the better fix, and this article says how. Administrators How do I install Convoro? Upload the zip, open the site in a browser and follow the installer. There is no Composer step, no build step and no shell required — you need PHP 8.5 and a MySQL database. Administrators How do I switch on the assistant that answers questions? Install the AI Assistant extension and put your Anthropic key in Admin → AI Assistant. It answers only from your Knowledge Base, so write the articles first — with none, it will correctly tell everybody that nothing is covered. Administrators I finished installing and it went back to the beginning. Why? A fault in the 1.0.0, 1.0.1 and 1.0.2 downloads, and in the first build of 1.0.3. Download 1.0.3 again and run the installer once more — your database is fine and nothing needs undoing first. Administrators Is there a .env file? Where is the database password? In config/site.php, a PHP file rather than a .env. A .php file is executed by the server; a .env is handed out as plain text by anything serving static files from the application root. Administrators The assistant keeps saying that is not covered. Is it broken? Almost always no. It answers only from published Knowledge Base articles, and saying so is what it is meant to do when none of them cover the question. Write the article and it will answer. Administrators Do I need to set up cron jobs? Convoro works without any, but three commands are worth scheduling: purchases:sweep if you sell anything, privacy:prune, and search:reindex if you use an external search backend. Administrators How do I make search better on a large community? Install the OpenSearch module, point it at your server in Admin → OpenSearch, and rebuild the index. MySQL stays the default and search falls back to it automatically if the server stops answering. Administrators My uploaded images work locally but 404 in production. Why? Your nginx configuration is serving anything ending in .png straight from disk, and Convoro serves uploads through PHP. Add a location block for the path — the list is in tools/deploy/nginx-paths-served-by-php.conf. Administrators What do I need to back up? The database, the content directory, config/site.php and any extensions you installed. The code itself you can re-download; those four you cannot. Administrators

How Convoro is built

The engine, the module system, and the ideas everything else follows.

How is Convoro organised? engine/ is the framework, modules/ holds System and the applications, themes/ holds templates and assets, and public/ is the only directory a web server needs to see. There is no vendor directory and no build output. Developers How do I create a new module? A directory under modules/ with a manifest.json and a class named after it extending Module, with register() and boot(). Routes, migrations, services and templates are found by convention from there. Developers What is the difference between register and boot in a module? register() binds services and registers into registries; boot() does work that may depend on other modules. Every module registers before any module boots, which is why widget areas must be registered in register(). Developers How do I add a database table or column? Add a dated file to your module's Migrations/ returning an anonymous class extending Migration with up() and down(). Run php tools/convoro migrate. Make it re-runnable — check before you alter. Developers How do I add a page to Convoro? Put it in your module's Routes/front.php or Routes/admin.php. Register literal paths before patterns, or a slug will shadow them. Developers What is the .cvr template syntax? Templates are .cvr files compiled to PHP. {{ }} escapes, {! !} does not, and the directives are @layout, @section, @yield, @if, @each, @empty, @notempty, @include, @php, @hook, @csrf and @asset. Developers How do I use the database or another service in my code? Everything is in the container. $this->app->make('db') for the query builder, and the same for anything a module bound in register(). Bind your own with $this->app->singleton(). Developers How do I make my module's content respect permissions? Add a <thing>_groups table, check the viewer's group ids against it in your service, and add the table to Groups::RESTRICTION_TABLES. Enforce it in the service, never in a template. Developers How should my module accept a file upload? Sniff the type from the bytes, never the filename or Content-Type; store outside the document root and serve through a controller; and add the path to the nginx list or it will 404 only in production. Developers How do I run and write tests? php tests/run.php, optionally with a filter. A test file returns an array of name => callable and passes if it does not throw. Clean up what you create, in a finally. Developers

Extending Convoro

Registries, widgets, search, and how modules avoid knowing about each other.

How do I make two modules work together? Through a registry in System, not a direct reference. A module that names another cannot be installed without it, and fatals on a site where it is switched off. Developers How do I get my module's content into search? Register a content type with a find callback that takes the viewer's group ids and filters by them. A find that ignores the viewer is a leak. Developers How do I make my content work with OpenSearch? Add documents and gates callbacks to your content type. documents yields what to index; gates says which containers a viewer may read. Provide both or your type is skipped entirely. Developers How do I add a widget other people can place? Register a widget type in register() with a render callback returning HTML. Filter by the viewer's groups inside it — a widget renders on pages you are not thinking about. Developers How do I let people comment on something my module owns? Use the discussions service. It gives your record a hidden topic and reuses posts, so comments get editing, reporting, reactions and moderation without you building any of it. Developers How do I make my module honour account deletion? Register your tables with the personal_data service in boot(). One line per table naming the column that points at a member. Developers What is the difference between a module and an extension? A module ships with Convoro; an extension is a package somebody installs into extensions/. The code is the same shape — the console can scaffold and package one for you. Developers