Category: software

  • maimat: Bulk image compression and resizing

    maimat (Mass Images Manipulation Tool) is an open source tool designed for batch image processing: resizing and compression. The application is written in Python 3.10+ and uses ImageMagick as the processing engine.

    Links

    https://github.com/zefir1990/maimat

  • Aleka is a cross-platform drawing app built on Flutter

    Aleka is a lightweight, fast drawing app written in Flutter. It works everywhere: in the browser, on the desktop (Windows, macOS, Linux) and on mobile devices (iOS, Android).

    Under the hood is pure Dart, Material 3 and attention to detail.

    Opportunities

    • Freehand drawing: smooth strokes with quadratic Bezier interpolation.
    • Palette of 15 colors: quick selection with visual indication.
    • Brush size: adjustable with a slider from 1 to 30 px.
    • Undo: step back through your strokes.
    • Clear the canvas: with one click.
    • Flood Fill: BFS with tolerance for smooth edges.
    • Saving: format .aleka (JSON).
    • Loading: open previously saved drawings and continue.
    • PNG export: Capture canvas at 3x resolution.
    • 🎬 Animation mode: Frame-by-frame animation with timeline:
      • Adding and removing frames, each with its own design.
      • Frame duration from 50 ms to 5 s.
      • Change FPS: 6, 8, 12, 15, 24, 30 or 60.
      • Export to MP4 (via ffmpeg on desktop, ffmpeg.wasm in browser).
    • Dark and light theme: Material 3, follows the system.

    Why Flutter?

    Flutter allows you to write one application for six platforms without duplicating code. Aleka uses only the native capabilities of Dart and Flutter SDK and a minimum of third-party dependencies: file_picker, image for working with pixels when filling, ffmpeg_wasm for exporting video in the browser.

    Architecture

    The project adheres to the principles of clean architecture and SOLID:

    • PaintCanvasController – controls the state of strokes and fills through the Listener/Observer pattern.
    • PaintToolbar – UI component of the palette, slider and buttons.
    • AlekaFile – serialization/deserialization in JSON, PNG capture.
    • MovieController – model of frames and animation state.
    • VideoExport – encapsulates MP4 encoding logic (desktop/web).

    I/O functions (saveStrokes, loadStrokes, capturePng, etc.) are made injectable – they can be replaced with mocks during testing. The project has 79 tests: checking serialization, cancellation, loading/saving, PNG and video export, frame model and timeline.

    File format .aleka

    The .aleka file is readable JSON that can be opened in any text editor:

      "aleka": "1.0",
      "strokes": [
        {
          "color": 4278190080,
          "strokeWidth": 3.0,
          "points": [[100.0, 200.0], [150.0, 250.0]]
        }
      ]
    }
    

    Each stroke stores a color (ARGB32), a thickness, and an array of points. The format is versioned by the aleka field.

    Animation mode

    One of the key features is the built-in frame-by-frame animation editor. You draw a frame, add a new one, draw the next one, and so on. The timeline shows thumbnails and allows you to change the order and duration of frames. The finished animation can be exported to MP4.

    The export algorithm iterates through all frames, captures them via RepaintBoundary, collects PNG bytes and transfers them to the encoder. On the desktop, the system ffmpeg is called, in the browser, ffmpeg.wasm is used – a full-fledged port of ffmpeg to WebAssembly, working directly in the browser sandbox.

    Flood Fill

    The fill implementation uses Breadth First Search (BFS) with a color tolerance (_kFillTolerance = 1000). This allows you to correctly handle smooth edges of strokes – the fill does not flow beyond the outline, but captures translucent pixels on the border. For an empty canvas, a solid fill is created without unnecessary calculations.

    Try

    Aleka is available on the web and as a native application:

    demensdeum.com/software/aleka/

    The source code is open under the MIT license:

    github.com/demensdeum/Aleka

  • Mama Calendar – cross-platform reminder app

    Mama Calendar is a cross-platform events and reminders application written in React Native (Expo) with two backend implementations: Node.js + MongoDB and PHP + MariaDB.

    The application allows you to create events with emoji categorization, select the type of repetition (once, annually, monthly, weekly, daily) and view important events for the next 3 days in a separate “Important Events” tab.

    Technology stack

    The frontend is written in React Native 0.86 via Expo SDK 57 with TypeScript, Expo Router for navigation and react-native-reanimated for animations. Expo-symbols are used for icons (SF Symbols on iOS, Material icons on Android/Web).

    The backend is implemented in two versions:

    • Node.js: Express 4, MongoDB 8 via native driver, custom authentication with scrypt + salt, manual token management. Docker Compose brings up the client (nginx), server and MongoDB.
    • PHP: PHP 8.2 without frameworks, PDO + MariaDB 11, bcrypt for password hashing, your own router and PSR-4 autoloading via Composer.

    Application functions

    • Registration and authorization: simple system with username/password and Bearer tokens
    • CRUD events: create, view, edit and delete events with date, emoji and repeat type
    • Smart filtering: The Important Events tab shows events for the next 3 days, taking into account repetition rules. For example, annual events show the nearest annual occurrence, monthly – by day of the month, weekly – by day of the week
    • Emoji picker: 20 preset emoji for quick categorization of events
    • Highlighting today’s events: Today’s events are highlighted with a red background (#B71C1C)
    • Dark theme: Automatic detection of system color scheme with separate palettes for light and dark theme
    • Internationalization: Russian and English languages ​​via React Context
    • Анимации: анимированный сплэш-скрин с Keyframe API и упругой интерполяцией, анимированная иконка приложения с вращающимся свечением
    • Admin endpoints: managing users, tokens and clearing the database through master tokens

    Why two backend implementations?

    The Node.js version is the main one, but the PHP version exists as an alternative for more classic hosting. The API is completely identical, which allows you to switch between them without changing the client code.

    Infrastructure

    The entire stack is raised through Docker Compose: the client is assembled through a multistage build (Expo export → nginx alpine), a server on Node.js, MongoDB 8. For the PHP version there is a separate compose file with MariaDB 11 and phpunit for tests.

    The assembly of the web version is automated by a PowerShell script that patches the API_URL before expo export and restores the originals after.

    Output

    Mama Calendar is a full-featured cross-platform application that covers the full cycle: from mobile and web frontend on React Native to two server-side options. The project is interesting for its architecture, use of modern Expo SDK capabilities and dual backend implementation.

    Links

    https://github.com/zefir1990/Mama-Calendar
    https://demensdeum.com/software/mama-calendar/events

  • Teflecher


    Teflecher is a fast, interactive, cross-platform quiz application built on top of Kotlin Multiplatform (KMP) and Compose Multiplatform. It allows users to intuitively load quizzes from local JSON files or remote URLs, answer multiple-choice questions, see instant feedback on correct answers, and track their results.

    Web:
    https://demensdeum.com/software/teflecher/

    GitHub:
    https://github.com/zefir1990/teflecher

    Also a quiz editor in the Teflecher Editor format based on Ionic + Capacitor technologies

    Web:
    https://demensdeum.com/software/teflecher-editor/

    GitHub:
    https://github.com/zefir1990/teflecher-editor

  • Ghost Contacts


    Ghost Contacts is a simple web application designed to hide your contacts from standard system APIs and phone books. All information is stored exclusively locally in your browser and is not transferred to external servers.

    Main features

    • Hiding from system APIs:Your contacts are not synced with the standard system contacts APIs and device phone book.
    • Panic Password: A special password, when entered, the entire contact database is instantly and irrevocably deleted.
    • Import and export: Convenient transfer of contact database via CSV files for creating backup copies.

    Online application:
    https://demensdeum.com/software/ghost-contacts/

    GitHub:
    https://github.com/demensdeum/GhostContacts

  • Raiden Video Ripper

    Raiden Video Ripper is an open source project designed for video editing and format conversion. It is created using Qt 6 (Qt Creator) and allows you to edit and convert videos to MP4, GIF and WebM formats. You can also extract audio from videos and convert it to MP3 format.

    Microsoft Store:
    https://apps.microsoft.com/detail/9nvzjs98smgc

    GitHub:
    https://github.com/demensdeum/RaidenVideoRipper/releases

  • Ushki Radio

    Ushki-Radio is a cross-platform radio player for online radio, made with a focus on simplicity and listening pleasure. No unnecessary functions, no overloaded interfaces – just turn it on and listen.


    https://demensdeum.com/software/ushki-radio

    The project uses the open source Radio Browser, making thousands of radio stations from all over the world available in the application. You can search for them by name, genre or popularity, add them to your favorites and quickly return to your favorite stations.

    Ushki-Radio is perfect for the role of a background radio player: it remembers the last station, allows you to control the volume and does not require complex settings. The interface is concise and understandable – everything is done so that nothing distracts from music, conversations and broadcasting.

    Technically, the project is built on React Native and Expo, so it works both in the browser and as a native application. Under the hood, expo-av is used to play audio, and user settings are stored locally. There is support for several languages, including Russian and English.

    Ushki-Radio is a good example of what a modern Internet radio player can be: open, lightweight, expandable and focused primarily on the listener. The project is distributed under the MIT license and is perfect for both personal use and as a basis for your own experiments with audio applications.

    GitHub:
    https://github.com/demensdeum/Ushki-Radio

    Google Play:
    https://play.google.com/store/apps/details?id=com.demensdeum.ushkiradio

  • Glazki TV: Modern player for Internet television

    Glazki TV is a modern, high-performance player for Internet television (IPTV), built on the basis of React Native and Expo. The project is focused on ease of use and speed, providing a convenient interface for viewing IPTV channels both on mobile devices and in the browser.

    Main features

    • Channel Browsing: Browse thousands of channels, categorized for easy navigation.
    • Search: Quickly find the channels you need by name.
    • Favorites: Save your favorite channels for quick access (data saved locally).
    • Deep Linking: Share direct links to channels that open automatically.
    • Theme support: The interface automatically adapts to the system dark or light theme.
    • Web support: The player is fully functional in the browser with URL synchronization.

    Technology stack

    The project is based on modern development tools:

    • Framework: React Native + Expo
    • Video Player: expo-video (замена устаревшему expo-av)
    • UI Toolkit: react-native-paper
    • Playlist Parser: iptv-playlist-parser

    Web version:
    https://demensdeum.com/software/glazki-tv/

    Google Play version:
    https://play.google.com/store/apps/details?id=com.demensdeum.glazkitv