Skip to content

meowsoni/Zotter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zotter

Zotter is a note-taking app that syncs with Zotero. It is designed to run on a homebrew e-paper typewriter, or a cyberdeck, or any device that you can take into a library and take notes on without getting distracted by a web browser.

      .zzzz.__
     / c  ^  _`;
     |     .--'
      \   (
      /  -.\
     / .   \
    /  \    |
   ;    `-. `.
   |      /`'.`.
   |      |   \ \
   |    __|    `'
   ;   /   \
  ,'        |  zotter v1
 (_`'---._ /--,
   `'---._`'---..__
by sid    `''''--, )
            _.-'`,`
             ````

Zotter is written in Python. It uses Zotero Web API's POST and PATCH function to upload notes directly to Zotero as JSON objects. It also retains local copies of the notes.

Here is the project structure:

/
├── config.json                # Your Zotero credentials (API key & user ID)
├── otter.txt                  # Otter ASCII splash art logo
zotter/
  ├── __init__.py            # Marks the directory as a Python package
  ├── __main__.py            # Entry point: python3 -m zotter
  ├── controller.py          # App flow controller: manages screen transitions and note state
  ├── config.py              # Loads Zotero API key, user ID from config.json
  ├── state.py               # Global state: current_note, cursor position, sync status
  ├── sync.py                # Handles syncing current_note to Zotero via Web API
  ├── log.py                 # Simple logging to zotter.log
  ├── ui.py                  # Renders splash screen and shared UI logic
  ├── editor.py              # Handles the note editing interface
  ├── browser.py             # Displays and manages local/synced notes
  ├── config.json            # User-specific config (not committed to repo)
  ├── zotter.log             # Log file (created at runtime)
  └── otter.txt              # Optional ASCII splash art (fallbacks to simple message)

DEPENDENCIES
The only dependency is python3 as the project's UI is built using curses and it uses standard keyboard input sys.stdin If you are using a custom keyboard, run QMK firmware and it should work.

SUGGESTED HARDWARE
Raspberry Pi Zero 2W
Waveshare 3.5" IPS Touch Screen for Raspberry Pi GPIO/SPI
Waveshare 4.2" e-Paper Display (in-progress)*

*The problem with curses is that a text-based UI cannot draw on most of e-paper displays as they use framebuffer and raw pixel data. A translation layer would need to be built that could efficiently render a command line application such as Zotter on e-paper displays. Drawing a low-level bytemap is impractical as we need partial refresh support to avoid artifacting on e-Paper displays.

Prototype Implementation

Below are mock ups for a prototype product. It is a mechanical keyboard in which Zotter is built into a 'lift over and up' style transparent cover. A wireframe hinge is used for threading wires into the keyboard where there is space for the battery. Friction from the rubber gasket makes the device stay up without need for expensive hinges. A USB-C port is exposed at the back of the keyboard and when plugged the keyboard can be used with any device as a standard USB keyboard. Total cost of device can be as less as $75.

28EBC4FB 539A4C38

About

Zotter is a command line note-taking app that syncs with Zotero

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages