{"id":583882,"date":"2026-08-13T22:24:13","date_gmt":"2026-08-13T22:24:13","guid":{"rendered":"https:\/\/www.newsbeep.com\/il\/583882\/"},"modified":"2026-08-13T22:24:13","modified_gmt":"2026-08-13T22:24:13","slug":"i-built-a-support-line-for-my-ice-sighting-app-that-forgets-you-were-ever-there","status":"publish","type":"post","link":"https:\/\/www.newsbeep.com\/il\/583882\/","title":{"rendered":"I built a support line for my ICE Sighting App that forgets you were ever there"},"content":{"rendered":"<p>Someone installs AntiFreeze, turns on alerts, and gets nothing. Maybe their phone put the app to sleep to save battery. Maybe they tapped past the notification permission during setup. Either way they need to ask a person, and the second they do, they have to decide how much they trust whoever is on the other end of that message.<\/p>\n<p><a href=\"https:\/\/antifreeze.app\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">AntiFreeze<\/a> is the app I launched in March for reporting and receiving alerts about immigration enforcement activity. It has around 7,900 users now. People write in with install problems, questions about why alerts stopped, requests from community organizations that want partner access, and the occasional press inquiry. Until this month they had one way to reach me, which was email.<\/p>\n<p>Every company you deal with runs a support channel. A phone tree, a WhatsApp business account, a Zendesk form, a chatbot that takes four turns to admit it can\u2019t help. Those are fine when the worst case for a leaked ticket is somebody selling your address to a mattress company. The math changes for this app. A support ticket for AntiFreeze proves that one identifiable person, at one identifiable moment, was using software for tracking ICE. The message itself might say nothing more interesting than \u201cpush notifications stopped working.\u201d The record of the contact is the exposure, and the message body barely matters.<\/p>\n<p>That ruled out the normal options. A hosted helpdesk means a company I\u2019ve never met keeps a permanent list of who contacted an immigration-enforcement-reporting app and when. A Google Form means Google keeps it. Our email runs through Proton, so if you write from a Proton address the whole thing stays encrypted end to end, and I don\u2019t hold your message on anyone else\u2019s servers. That covers people who already use Proton or who are comfortable with email. It does not cover the person standing in a parking lot who needs a fast answer and has Signal on their phone already.<\/p>\n<p>So I spent two days building a support line that runs on Signal, and it went live carrying real traffic on the second day.<\/p>\n<p>What the line is for, and what it absolutely is not for<\/p>\n<p>The support number handles questions about the app. Installation, notifications, partner access, press.<\/p>\n<p>It is not the channel for reporting an ICE sighting. Sightings go through the app. A report texted to the support number does not reach anyone in the reporter\u2019s area, and it will sit in a queue until I read it.<\/p>\n<p>I want that stated plainly, because the failure mode terrifies me. Picture someone who saw agents outside a school, pulls up a number they half-remember seeing in an article, fires off a text, and walks away believing they raised the alarm for their neighborhood. They didn\u2019t. Nobody got that alert. The system sends an automated reply spelling this out the first time anyone messages, and I\u2019m repeating it here because an article that implies \u201ctext this number to report ICE\u201d would produce that exact failure at scale.<\/p>\n<p>Deletion as a requirement instead of a feature<\/p>\n<p>Most software keeps everything until somebody remembers to clean it up. Deletion lives in an admin panel behind a button nobody clicks.<\/p>\n<p>On this line, message bodies disappear a week after the last message in a conversation, whether or not I remember, whether or not I\u2019ve read them, whether or not the question was resolved. Attachments get erased in the same pass. I don\u2019t hold a searchable archive of who asked me what, because I don\u2019t want one, and because I can\u2019t hand over what I don\u2019t have.<\/p>\n<p>Closed tickets never reopen. If you message me in September about a notification bug and again in November about something else, those are two separate tickets with two separate clocks. Your contact record persists so I know we\u2019ve talked, but the words don\u2019t.<\/p>\n<p>The hardest part was the phone in your pocket<\/p>\n<p>Erasing my own database is the easy half. I control that box and I can reason about it.<\/p>\n<p>The copy sitting in your Signal app is the one that matters if your phone gets taken at a traffic stop, and I have no authority over your device at all. Signal solves this with disappearing messages, but the timer has to be set on the conversation, and for weeks it wasn\u2019t. I found out by opening my own test thread and noticing the header said \u201cDisappearing Messages off.\u201d A step in my own written procedure was supposed to handle it. That step ran without any error and did nothing.<\/p>\n<p>The line now sets the timer on each conversation as it starts, including conversations that already existed. Your copy expires on your phone on the same schedule mine expires on my server. A database that forgets on schedule is worth very little when the phone in someone\u2019s pocket remembers forever.<\/p>\n<p>Somebody called<\/p>\n<p>Signal calls to the support number used to ring out into silence. No ticket, no reply, nothing. Someone tried to reach me and the system swallowed it.<\/p>\n<p>Calls now open a ticket and send one text back explaining that the line takes text only. One text, rate-limited on purpose. Somebody redialing six times in two minutes is probably scared, and answering with six automated messages means the software is shouting at a frightened person. That was a judgment call about human beings rather than a technical decision, and it\u2019s the kind of choice that comes up constantly once you start asking what happens to this person on their worst day.<\/p>\n<p>Calling also can\u2019t extend how long your messages live. If redialing reset the retention clock, someone could keep their own record alive by accident, and the promise in the auto-reply would be a lie.<\/p>\n<p>What shows up on my lock screen<\/p>\n<p>When a message arrives I get a push alert on my laptop and my phone, because I\u2019m not going to sit refreshing a dashboard, and someone waiting on an answer shouldn\u2019t depend on when I next check.<\/p>\n<p>Those alerts carry no message content. They say \u201cNew ticket #7\u201d and nothing else. My lock screen is visible to anybody standing behind me at a coffee shop, and notification history on a phone outlives the message that triggered it. The alert itself runs on a server I own rather than a notification service, since even content-free pings would tell an outside company the timing and volume of contacts arriving at an ICE-reporting support line, and that pattern says plenty on its own.<\/p>\n<p>What this does not do<\/p>\n<p>I\u2019d rather list the gaps than let anyone assume they don\u2019t exist.<\/p>\n<p>Signal still knows a message went to that number, and when. Nothing I build changes what Signal itself can see. Cloudflare sits in the path for the dashboard, which is a trade I made for access control and for surviving attacks, and it means traffic terminates on their infrastructure. Attachments live on disk until the purge runs. Retention is a schedule rather than an instant, so your message exists for that week. If my server goes down, messages queue up at Signal and reach me late.<\/p>\n<p>Calling this \u201csecure\u201d or \u201canonymous\u201d would be marketing. The accurate version: contacting support leaves as little trace as I can manage, and what has to exist gets deleted on a fixed schedule.<\/p>\n<p>It\u2019s one guy<\/p>\n<p>The dashboard supports multiple people. Nobody else is on it. Every message to that line comes to me, and I read all of them, which is fine at this size and won\u2019t be forever. If AntiFreeze keeps growing I\u2019ll need people I trust enough to hand an authenticated laptop to, and any one of those laptops could read every open ticket. That\u2019s a real limitation of the design and I\u2019d rather say so now than pretend the software solves a trust problem it can\u2019t.<\/p>\n<p>None of this is glamorous. There\u2019s no clever cryptography in it and nothing here is novel. It\u2019s a pile of unremarkable choices, made one at a time, by asking the same question over and over: what happens to this person if somebody hostile sees this?<\/p>\n<p>Grassroots tools get built by people who care about the mission and then get handed a support inbox as an afterthought. For an app whose users have reason to fear a government agency, the support inbox is part of the safety story. It deserved the same care as the alerts.<\/p>\n","protected":false},"excerpt":{"rendered":"Someone installs AntiFreeze, turns on alerts, and gets nothing. Maybe their phone put the app to sleep to&hellip;\n","protected":false},"author":2,"featured_media":583883,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[264089,138,4073,85,8697,123,264090,46,321,94299,125,627],"class_list":["post-583882","post","type-post","status-publish","format-standard","has-post-thumbnail","category-mobile","tag-antifreeze","tag-encryption","tag-ice","tag-il","tag-immigration","tag-internet","tag-internetprivacy","tag-israel","tag-mobile","tag-signal","tag-technology","tag-trump"],"_links":{"self":[{"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/posts\/583882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/comments?post=583882"}],"version-history":[{"count":0,"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/posts\/583882\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/media\/583883"}],"wp:attachment":[{"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/media?parent=583882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/categories?post=583882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.newsbeep.com\/il\/wp-json\/wp\/v2\/tags?post=583882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}