shareyourthoughtswith.me

Telemetry

Share Your Thoughts With Me captures a small set of events into the telemetry_event table.

Event types

| Type | When | Fields | |------|------|--------| | page_hit | A public HTML page returns 2xx/3xx | path, referrer, user_agent, session_id | | post_started | Visitor lands on a post's first step | post_id, session_id | | post_step_viewed | A subsequent step renders | post_id, step_id, session_id | | post_step_answered | A step submission is accepted | post_id, step_id, session_id | | post_completed | The final submit lands in the DB | post_id, post_version_id, session_id, payload.entry_id | | post_abandoned | Derived view: started > 30 min ago, no completion | (derived at read time on /admin/telemetry) | | admin_login | Admin signs in | actor=admin | | api_key_created/api_key_disabled/api_key_deleted | API key lifecycle | payload.api_key_id | | post_published | A draft is promoted to published | post_id | | comment_moderated | An entry is hidden or shown | payload.entry_id, payload.is_hidden |

Storage

All telemetry rows live in the same Postgres database as feedback. They carry a project_id, an event_type, optional post_id / post_version_id / step_id / session_id, a path, a referrer, a user_agent, a JSONB payload, and the actor (one of visitor, admin, api).

Privacy

user_agent and referrer are stored raw. The visitor's IP address is not stored — it is hashed into feedback_entry.ip_hash (HMAC-SHA256 with SYTWM_IP_SALT) for abuse-correlation purposes only. Telemetry rows themselves do not carry the IP.