The Cyborgcyclopedia

Site information

What is Pandoky?

It’s a vibe-coded, Pandoc-based, Dokuwiki-inspired, flat-file, wiki-like CMS written in Python

Figure 1. Current mood.

What is it?

Pandoky is a lightweight, flat-file based Content Management System (CMS) inspired by DokuWiki, built using Python, Flask, and Pandoc. It allows for easy creation and management of Markdown-based wiki pages with a focus on extensibility through a plugin architecture. All code was created in an interactive chat session with Google Gemini 2.5 pro (preview). The AI followed the instructions given by a human creator, starting with the prompt,

I have a new1 vibe coding project for you. Dokuwiki is a content management system based on flat file data storage. It’s implemented in PHP. I would like to create a dokuwiki clone implemented in python. It should have the same basic architecture as Dokuwiki including plug-in extensibility.2

What happened next

The AI replied with, initially, an overview of how one might create such an app, and then a skeleton for a Flask app, followed by initial versions of core files, basic templates and static assets, and plug-ins. The human creator in turn followed the instructions of the AI, asked questions of procedure, copied the files, ran them, reported errors, made changes (or copied over corrected or improved versions of different components), and then suggested new plug-ins or expanded functions.3 Who was the lord and who was the servant? Is the human a creator, worker, or just another Google customer? Is the AI a worker, a creator, or just another product? It is a question for the ages. If anything, I have learned how little I know about the basic conventions of software development. This code is still being tested and so this site may not always work. Please let me know if you find any errors, but I can’t promise any fixes.

Key features

Core technologies

  1. Prerequisites:

    • Python 3.9+
    • Node.js and npm
    • Marp CLI
    • Pandoc executable installed and in your system’s PATH.
  2. Clone the repository (if applicable).

  3. Create a virtual environment:

    python3 -m venv venv
    source venv/bin/activate  # On Linux/macOS
    # venv\Scripts\activate   # On Windows
  4. Install Dependencies:

    pip install -r requirements.txt
  5. Configuration:

    • Review and adjust config.py if needed.
    • Set the following environment variables:
      • FLASK_SECRET_KEY
    • For email functionality (account verification, password reset), set the following environment variables (or configure directly in config.py for development only):
      • MAIL_SERVER
      • MAIL_PORT
      • MAIL_USE_TLS
      • MAIL_USERNAME
      • MAIL_PASSWORD
      • MAIL_DEFAULT_SENDER
  6. Initialize data files:

    • On the first run, plugins should create their necessary JSON data files in the data/ directory with default values.
    • Register an initial admin user via /auth/register and then ensure this username is added to the "admin_users" list in data/acl_config.json.
  7. Run the development server:

    python app.py

    The application will typically be available at http://127.0.0.1:5000/.

Basic usage

Future plans

I plan on testing this version of the app online and then possibly trying to create (with AI assistance) plugins that emulate functions I use with Dokuwiki, for instance a deck.js plugin, k-means clustering, and a page inclusion plugin. A fun idea would be to learn how to use Javascript fetch() to interact with Flask endpoints, opening the possibility of perpetual scrolling, but then, who wants to contribute to the gradual brainrot of the terminally online?

AI acknowledgement: This README was itself written by Google Gemini 2.5 Pro (preview) at the end of the development process. The introduction was expanded and the document was edited by the human creator. The cascading style sheets and favicon were also created in discussions with the same AI tool.


  1. The earlier project was to create a command-line app that would convert Markdown text files and CSV files to pages and assignments and upload them to Canvas LMS using its API. What can I say? I love learning outcomes.↩︎

  2. The full chat transcript is (for now) available here: https://g.co/gemini/share/8e3b3be23d77.↩︎

  3. At some point, Pandoc was added as the core rendering engine because the human likes using Pandoc. He knows there’s a performance cost by launching a new process on every render.↩︎

  4. The AI felt this was important to include and I let it have this one to avoid an argument.↩︎

  5. tbh I think these plug-ins all depend on each other. They were created in the same chat and that usually initiated several changes to related files, and to app.py. This was really at the outer limits of my knowledge of software architecture.↩︎