LazyWikis is a Flutter web app for building MediaWiki-ready installation guides. It lets you compose guides as structured steps (text, commands, screenshots with annotations), preview generated wikitext, and export either plain wikitext or a ZIP bundle.
- Build and run with Docker:
docker run --rm -p 3030:80 tinka3301/lazywikis:latest- Open
http://localhost:3030 - Create a guide, add one step, add a command block, then export
WikiText (.txt)
- Create a guide with an introduction and ordered steps
- Add content blocks per step:
- Rich text
- Command + optional output
- Screenshot + caption + annotations (arrow/circle/rectangle)
- Generate MediaWiki-compatible wikitext with:
- Proper section headings
- TOC support
- Command and output labels
- Centered, wide image markup
- Export:
guide.txt(wikitext)- ZIP bundle (
guide.txt+images/) with baked annotations
- Open dashboard and create a guide.
- Add or rename steps from the left sidebar.
- Select a step and add text/command/image blocks in the editor.
- Use the right preview panel:
Renderedfor a visual approximationRawfor exact generated wikitext
- Export:
WikiText (.txt)for copy/pasteBundle (.zip)when images are included
docker build -t lazywikis .
docker run --rm -p 8080:80 lazywikisOpen http://localhost:8080.
Prerequisites:
- Flutter SDK (project has been used with Flutter 3.35.x)
- Chrome (or another supported web browser)
flutter pub get
flutter run -d chrome- Guide title uses level-1 heading:
= Guide Title = - Steps use section headings for MediaWiki TOC
- Command blocks are emitted as:
;Command:
<pre>
...
</pre>
;Output:
<pre>
...
</pre>- Images are emitted as centered/wide MediaWiki file tags
Image filenames are generated consistently for both wikitext and ZIP export.
Priority:
- Caption-based filename (sanitized)
- Fallback:
guide_step{n}_{m}.ext
This prevents mismatches between [[File:...]] references and actual exported files.
During ZIP export, image annotations are baked into image bytes. Coordinates are normalized to avoid positional shifts between editor preview and exported files.
lib/data/models/domain models (Guide,Step,StepContent, image + annotation models)lib/data/services/generation/export/annotation/image serviceslib/ui/dashboard/editor/view widgetslib/utils/conversion/rendering/helpers (wikitext renderer, quill conversion, filename helpers)lib/routing/app router (go_router)lib/config/theme and constants
- Download service is web-first; non-web download is stubbed.
- Wikitext renderer is a preview approximation, not a full MediaWiki engine.
- Existing test coverage is minimal.
Useful commands:
dart format lib test
flutter analyze
flutter test- UI layer (
lib/ui/): screen/widgets + editor interactions - ViewModel layer (
lib/ui/guide_editor/guide_editor_viewmodel.dart): state transitions and save flow - Data/services layer (
lib/data/services/): generation, export, image/annotation handling - Models (
lib/data/models/): serializable guide/step/content/image domain objects
- User edits content in a block editor widget.
- Block emits updated
StepContent. - Step editor updates the selected
Step. - ViewModel updates guide state and regenerates wikitext.
- Preview panel re-renders from the generated wikitext string.
- Save/export uses the same guide state and generated output pipeline.
- Add new enum value in
StepContentType(lib/data/models/step_content.dart). - Add fields/factory/copyWith support in
StepContent. - Update JSON serialization (and generated
*.g.dartif needed). - Add editor widget under
lib/ui/guide_editor/widgets/editors/. - Wire it in
StepEditorPanel._buildEditorForContent(...). - Update
WikiTextGeneratorto emit valid MediaWiki output. - Update
WikiTextRendererso rendered preview matches emitted wikitext. - Validate export path if the block writes files/resources.
This project is open source and licensed under the MIT License.
See LICENSE for the full text.


