<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
  <id>io.github.bendik.Zodia</id>
  <metadata_license>CC0-1.0</metadata_license>
  <project_license>AGPL-3.0-or-later</project_license>

  <name>Zodia</name>
  <summary>Natal charts, transits &amp; synastry</summary>

  <description>
    <p>
      Zodia calculates your natal chart and live planetary transits, and shows each
      aspect with interpretations drawn from a crowd-sourced pool. A curated baseline
      set is bundled in the app and always available offline, so you get meaningful
      readings from day one.
    </p>
    <p>
      Discover other Zodia users automatically. Nearby peers appear over mDNS on your
      local network; a global relay connects you to users anywhere on the internet.
      When two people exchange charts, shared aspects and synastry placements appear
      instantly alongside the community interpretations for those aspects.
    </p>
    <p>
      Connected peers can make direct voice calls. All communication is end-to-end
      encrypted over QUIC — no central server stores your birth data, chart, or
      conversation history.
    </p>
  </description>

  <launchable type="desktop-id">io.github.bendik.Zodia.desktop</launchable>

  <branding>
    <color type="primary" scheme_preference="light">#7b5ea7</color>
    <color type="primary" scheme_preference="dark">#22174a</color>
  </branding>

  <screenshots>
    <screenshot type="default">
      <caption>Natal chart with aspect list and interpretations</caption>
      <image type="source">https://bendik.github.io/zodia/screenshots/chart.png</image>
    </screenshot>
    <screenshot>
      <caption>Network view showing discovered peers</caption>
      <image type="source">https://bendik.github.io/zodia/screenshots/network.png</image>
    </screenshot>
    <screenshot>
      <caption>Synastry view between two connected users</caption>
      <image type="source">https://bendik.github.io/zodia/screenshots/synastry.png</image>
    </screenshot>
    <screenshot>
      <caption>A private circle shared with an invited member</caption>
      <image type="source">https://bendik.github.io/zodia/screenshots/circles.png</image>
    </screenshot>
  </screenshots>

  <url type="homepage">https://github.com/bendik/zodia</url>
  <url type="bugtracker">https://github.com/bendik/zodia/issues</url>
  <url type="vcs-browser">https://github.com/bendik/zodia</url>

  <developer id="io.github.bendik">
    <name>Bendik Aagaard Lynghaug</name>
  </developer>

  <categories>
    <category>Network</category>
    <category>Science</category>
    <category>Utility</category>
  </categories>

  <keywords>
    <keyword>astrology</keyword>
    <keyword>natal chart</keyword>
    <keyword>horoscope</keyword>
    <keyword>transits</keyword>
    <keyword>aspects</keyword>
    <keyword>synastry</keyword>
    <keyword>p2p</keyword>
  </keywords>

  <recommends>
    <display_length compare="ge">360</display_length>
  </recommends>

  <supports>
    <control>pointing</control>
    <control>keyboard</control>
    <control>touch</control>
  </supports>

  <releases>
    <release version="0.9.2" date="2026-07-30">
      <description><p>Peers can now set their own display name, shown to others instead of a hex id — set yours from the pencil icon next to your node status on the Network tab. Applies wherever a peer's name appears (sidebar, notifications, chat), with a nickname you've set for someone yourself always taking priority.</p></description>
    </release>
    <release version="0.9.1" date="2026-07-30">
      <description><p>Fixed private circles being unreachable from the app: sharing a reading required an authoring action nothing in the interface actually triggered, so the share button never appeared. Your own edits and contributions now show up in your own activity feed and can be shared to a circle from there, same as any other reading.</p></description>
    </release>
    <release version="0.9.0" date="2026-07-30">
      <description><p>Private circles: share a reading with specific people instead of the whole network. Create a circle, invite friends straight from your connected peers, and only invited members can decrypt what you share there — everyone else sees nothing readable, even if the encrypted traffic reaches them. Invite someone as read-only, or with posting rights of their own so the circle becomes a small shared space rather than a one-way share. Hearts and replies work on circle-shared readings exactly the same as public ones. Circles get their own row in the sidebar, right alongside Chart, Sky, and Network, each with a small colored marker so they're easy to tell apart at a glance.</p></description>
    </release>
    <release version="0.8.0" date="2026-07-30">
      <description><p>Sync now scales per-key instead of pulling one shared firehose log — your device only replicates operations for the specific charts and aspects you actually view, keeping traffic proportional to what you read rather than total community activity. Fixed a real gap where content received from a peer was never relayed onward to a third peer, so multi-hop sync now works as intended. Interpretations can be revoked by their author, and subscriptions unsubscribe automatically after a grace period instead of holding a topic open forever. Under the hood, the app now runs on a new sync client library shared across the codebase, the foundation for local storage pruning (on-demand for now) and future non-GTK frontends.</p></description>
    </release>
    <release version="0.7.1" date="2026-07-24">
      <description><p>The Sky tab is now a live activity feed instead of a static transit table — affirmations on your interpretations, replies to your threads, and transit aspects (including house transits) entering or leaving orb all show up as they happen, and the notification bell now badges for real when something targets your own work. Aspect pages move from competing write-ups to a single interpretation everyone edits together, with a "Previous version" toggle to compare revisions; if someone edits a block you wrote, you're notified and can veto the change within 7 days to restore your version. Peers still on 0.7.0 won't see these collaborative edits until they upgrade — nothing breaks, they just don't converge on the new shared text yet.</p></description>
    </release>
    <release version="0.7.0" date="2026-05-30">
      <description><p>Affirmations (♡) now travel with the rest of the community log — when someone ♡s an interpretation on one device the count converges everywhere within seconds. Replies are first-class too: a 💬 button on every community reading lets you write a response that hangs as a thread under the original. The Network tab now shows a "Sync activity" panel so you can see which peers your device is catching up with. Reconnecting to peers you've already met no longer asks for consent again — the second handshake auto-accepts on both sides.</p></description>
    </release>
    <release version="0.6.0" date="2026-05-28">
      <description><p>Upgrade to iroh 0.98 and p2panda 0.6 — newer transport stack, persistent operation log (sync state survives restarts), and a switch from rusqlite to sqlx for the local store. Reconnects to known peers now happen automatically as soon as their announce is heard, and shared community interpretations refresh into view the moment they arrive.</p></description>
    </release>
    <release version="0.5.1" date="2026-05-28">
      <description><p>Drop the self-hosted relay/bootstrap node and fall back to the public iroh defaults — restores NAT traversal for users without a working custom relay.</p></description>
    </release>
    <release version="0.5.0" date="2026-05-07">
      <description><p>Rewrote most of the ui with more reusable components; add placemnent interpretations; improve social sidebar and sorting.</p></description>
    </release>
    <release version="0.4.12" date="2026-04-28">
      <description>
        <p>Add brand colors for Flathub; shorten app summary; revert to iroh canary relays; track Cargo.lock for reproducible builds.</p>
      </description>
    </release>

    <release version="0.4.11" date="2026-04-28">
      <description>
        <p>Updated app screenshots and general maintenance release.</p>
      </description>
    </release>

    <release version="0.4.10" date="2026-04-27">
      <description>
        <p>Add custom iroh relay node for NAT traversal and update release mechanics.</p>
      </description>
    </release>
    <release version="0.4.9" date="2026-04-26">
      <description>
        <p>App icon now shown in window titlebar and macOS dock; proper .icns generated for macOS .app bundle.</p>
      </description>
    </release>
    <release version="0.4.8" date="2026-04-26">
      <description>
        <p>Bundle GeoNames city data in the source tree; city search now works in offline Flatpak builds.</p>
      </description>
    </release>
    <release version="0.4.7" date="2026-04-26">
      <description>
        <p>City search with toggle to manual lat/lon input; graceful fallback when city data is unavailable.</p>
      </description>
    </release>
    <release version="0.4.6" date="2026-04-21">
      <description>
        <p>Replace deprecated EntryCompletion with inline city search: results appear as selectable rows below the entry, no popup needed.</p>
      </description>
    </release>
    <release version="0.4.5" date="2026-04-18">
      <description>
        <p>Native city autocomplete via EntryCompletion; rephrase network empty state; drop custom popover.</p>
      </description>
    </release>
    <release version="0.4.4" date="2026-04-18">
      <description>
        <p>Fix AppStream validation: developer id and OARS social-audio rating.</p>
      </description>
    </release>
    <release version="0.4.3" date="2026-04-17">
      <description>
        <p>Flatpak: GNOME runtime 50, notification portal, inline cargo config.</p>
      </description>
    </release>
    <release version="0.4.2" date="2026-04-17">
      <description>
        <p>aarch64 Linux build target; fix Windows GNU linker setup.</p>
      </description>
    </release>
    <release version="0.4.1" date="2026-04-17">
      <description>
        <p>Desktop notifications for incoming chart requests, calls, and messages.</p>
      </description>
    </release>
    <release version="0.4.0" date="2026-04-16">
      <description>
        <p>Initial public release.</p>
      </description>
    </release>
  </releases>

  <content_rating type="oars-1.1">
    <!-- Peer-to-peer voice calls and chart exchange between consenting users -->
    <content_attribute id="social-chat">mild</content_attribute>
    <content_attribute id="social-audio">moderate</content_attribute>
  </content_rating>
</component>
