Repository navigation
v0.8.1
Added
GET /feedtakes the date, media, author and location guess filters,GET /searchtakeshas_coordsandGET /eventstakesmedia;GET /search/datesandGET /feed/datescount the matching events per day (#813).GET /sites, an event's site links and the site suggestions carry each site's picture inmedia, the image of its first source in source order that is not graphic; a site search hit carries the same picture (#813).GET /search/sectionsreturns the top hits of each kind in one request, each section the first page of that kind's list with its cursor (#813).- Search finds sites by their name or by the title or note of one of their sources, and the search page's Show field picks every kind: Requested, Detected, Geolocated, Sites, Collections, Analysts and Organizations (#807).
- On the event forms, each source carries Move earlier and Move later, and readers see the sources in the order the author set (#804).
- An admin can restore a soft-deleted account from the onboarding table: the account and the events its soft delete hid come back (#793).
- On the search page, a typed coordinate pair offers to open that point on the map, and on All a query that names an analyst or an organization exactly puts a link to their page right under the search field (#791).
- When a search finds nothing, the search page suggests the closest spelling that finds results, such as Khan Yunis for Khan Younis or a handle missing a letter (#790).
- A map control beside the zoom buttons picks the basemap: Auto, which follows the theme, Dark, Light, Streets or Terrain; the browser keeps the choice (#709).
- On the Dark and Light basemaps, the same control sets the label language (Latin, local or both), the label density, and whether region borders and roads show (#709).
- The basemap control turns building footprints on or off on the Dark and Light basemaps (#709).
- The Dark and Light basemaps can highlight military areas and airports, with their runways, from zoom 10; the highlight is off by default and the basemap control turns it on (#709).
- A coordinate grid overlay, off by default, draws latitude and longitude lines with their labels on every basemap, finer as you zoom in (#709).
- The Dark and Light basemaps draw disputed country borders dashed, and the basemap control can draw them solid (#709).
- A Relief switch on the Dark and Light basemaps shades hills and mountains from open elevation data; it is off by default (#709).
- A Satellite basemap draws the cloud-free Sentinel-2 mosaic of 2016 by EOX (#709).
- Two map overlays, off by default, show NASA data of the day before on every basemap: true-colour satellite imagery and fire detections (#709).
- An instance can serve the basemap tiles, icons and relief from its own S3-compatible bucket: the backend's
update-mapcommand copies them there on a schedule, andNEXT_PUBLIC_MAP_ASSETS_URLpoints the map at them (#709). - You can attach a GIF as a source file or a proof image: each of its frames is stored as a PNG image of its own, up to 6 frames; a longer GIF is refused with a request for a video or fewer frames (#744).
- Type a latitude and a longitude, or paste a Google Maps link, to centre the map there: from a map control beside the basemap control on the map, and above the contour map of the site forms; a pair out of bounds says why (#748).
- The tag field of the event and source forms suggests your most used tags, or the platform's, in one line of one-click chips under the search;
GET /tags/suggestedlists them (#725). - When a detection's proof holds the footage its source lacks, the edit form copies that proof image into the empty source file slot in one click;
POST /uploads/from-proofstages the copy (#746). - A pulsing dot above the basemap control shows while the daily satellite imagery or the fire detections are still loading, including after you move the map (#758).
- In the basemap control, a
?beside each basemap, label setting, layer and overlay says what it shows and links to the source of its data or tiles (#757). - When the basemap's tile server does not respond, offline or with one provider down, a line over the map says so instead of leaving it blank (#792).
- Saving a site edit asks for an optional version note, like an event edit, and the site's history shows it (#800).
Changed
-
/paletteshows High level and Low level primitives from the import graph, the filter panel as one demo, and its check fails on a missing entry, a wrong tier or a primitive only one component uses (#814). -
docs/design.mdnames one primitive per job (show an item, pick from a vocabulary, enter a date, remove, delete, show an error...), and lint fails on a raw<select>,<textarea>or date input,confirm()or a retired primitive (#814). -
/palettelists the shared components by category, one file each, with a table of contents and a filter by name; each entry shows its live demos only, anddocs/design.mdholds the details (#814). -
On the event and site forms, the coordinates field sits under the map, the title fields drop their character counter, and the suggested tags show as many as fit on two lines with no Show more (#814).
-
The Filters header and the phone's filter bar show how many results match, such as 284 results, on the map, search, the feed and the Requests board;
GET /search/datesandGET /feed/datesreturn thattotal(#814). -
A removal uses the cross and acts at once; a deletion or a revocation uses the trash and confirms in place: revoking an invite code shows the trash instead of a ban sign (#814).
-
GET /feedandGET /feed/datestake the Show filter asstatus(geolocated,requested,detected), the same parameter and values asGET /searchandGET /events, and no longer acceptkind(#814). -
The Requests board keeps its filters in the page URL, like the map, search and the feed (#814).
-
Every field that picks from a list, in the filter panel and on the forms (kinds, levels, reasons, effects, conflicts, tags), lists its options on focus, closes after a pick and shows the picks as removable pills (#814).
-
Every field that finds an event, a site, a collection, an analyst or an organization lists its matches the same way, and Find a collection now runs the collection's own action on a pick (#814).
-
One filter panel serves the map, search, the feed and the Requests board: collapsible groups What, When (the Event date and Added timelines), Source, Where and Who; Conflict, Tags and accounts search in their line; a phone opens it in a sheet (#813).
-
Search, the feed and the Requests board show the filter panel under the map's Filters header, open by default and closed on the map; each surface remembers your choice, and the map header drops its point count (#813).
-
The feed keeps its filters in the URL, and its Following choice is a switch in the filter panel; search lists an analyst or an organization the query names once, first in its section (#813).
-
Every list shows an event, a request, a site or a collection one way, as a compact row, a list row or a feed card: its picture or its kind's icon, the title, a line with the kind, date, analyst and place, then its state (#813).
-
Breaking:
GET /searchreturns one ranked list,hits, with onecursorthat pages it, in place of five groups with their totals;typerepeats to pick the kinds, andstatusnarrows only the events (#807). -
The search page lists the top hits of each kind under its name, and See all opens one kind's list with Show more; the URL keeps the query and the kind, so Back and shared links work. The profile's links into search read See all (#813).
-
The Links help on the source forms holds two sentences, and the methodology guide says how to link, archive and permalink a source (#804).
-
The suggested tags under a tag field wrap instead of running off the card, the first 6 then one Show more (#804).
-
A minor destructive action, such as dismissing a notification, acts at once from a red cross; an important one, such as removing a co-geolocator or deleting an approval, asks for a second click in place instead of a dialog (#803).
-
The version history starts every title on one line, Current included, and drops the count above the list; the invitation cards no longer point at Accept and Decline, and the geolocator invite picker states the limit of 10 geolocators (#803).
-
A site zone covers at most 1,000 km², down from 10,000 km²: the contour editor says so while you draw, and areas read with thousands separators (#800).
-
Filing a source on a site opens the site page, like the other submit forms, in place of a separate confirmation page (#800).
-
The event forms' Location block shows the event page's map under the coordinates: click the map or drag the pin to set the coordinates, and typed coordinates move the pin (#801).
-
Site suggestions reach 10 km from the event instead of 2 km, and sites found by a name search show under their own Search results heading (#801).
-
The edit form of an open request no longer offers Linked sites, since only a published event links to a site (#801).
-
The status filter is called Show everywhere and stays in view with Conflict and Tags; filters apply at once on a phone, each active-filter pill names its filter, and the feed's Following or All choice moves into the filter panel (#799).
-
Errors read in plain words in one shared notice: when Vidit does not respond, the map, search, lists and pages say so with a Retry, a refused field shows its reason under it, and upload limits read in MB (#795).
-
Every button with a text label shows the icon of its action, and the same action shows the same icon everywhere, the event forms' publish and save buttons on a phone included (#794).
-
On a request page, the asker sees Edit, which opens the request's form, and every other reader sees Geolocate; the asker no longer gets both for the same page (#794).
-
Search finds results while you type: the last word matches as the start of a longer word, so a partial place name or handle already lists what it begins, and accents no longer matter (
cafefindsCafé) (#788). -
The settings page shows labels only, with each explanation behind its
?, and a section says Saved for a moment once a setting reaches your account (#792). -
The help of the dashed disputed borders switch says the map data, not Vidit, decides which borders are disputed, and what the switch does (#792).
-
Search reads quotes as a phrase,
ORas either word and-wordas a word to exclude, and a query shorter than 4 characters no longer matches every source link that holds it (#787). -
The event page, the detection queue and the two event groups of search each read one shared eager-load set instead of restating it, and
docs/engineering.mdlists those sets (#779). -
On the search page, the Tags filter narrows the Collections group to the collections that hold the tag instead of emptying it, and the Collections scope offers Tags beside Author (#778).
-
The event page's Add to collection matches the search page's: each collection shows its cover, a field finds one by title once you hold six or more, and New collection sits at the foot of both (#774).
-
You link and unlink an event's sites in its submit and edit forms, with a site search and the sites nearby; the event page lists them as Linked sites, and the site page keeps only Link one of my events in its action bar (#765).
-
A satellite or aircraft source no longer shows amber imagery warnings on the event page, the map side panel, a site page or the source forms; the
?help of Links and Captured says what lets a reader reopen the image (#771). -
The sidebar's GitHub, X and Discord icons show in the accent colour, in the rail and in the phone drawer (#764).
-
A collection's page and its create and edit forms share the event page's layout: the description and events on the left, 20 at a time, and the map with the current event and the details on the right, in view while you scroll (#732).
-
The Submit page opens on six tiles across the full width: Geolocation, Request, From an X post, Bulk import, Site and Collection, each with a drawing of the result, when to pick it and what it needs (#728).
-
The filter panel groups its filters under labels (Layers, Event, Source and people), and filters that belong together share one row, so the map shows five rows for its eleven filters; search, the Requests board and the feed group the same way (#750).
-
On the map, Sites is one more filter chip after Requested, Detected and Geolocated, in a row now labelled Show, counted, removed and cleared like the other filters; the filter panel drops its group headings and its New site link (#763).
-
On a wide screen, the About page keeps the prose in its main column and moves Guides, Stay in touch and Legal to the right rail, which stays in view while you read; on a phone the links follow the prose (#735).
-
On the map, sites take the event point colour, show as rings below zoom 10 (around a cluster or alone) and as zones from zoom 10 (#756, #810, #813).
-
The contour editor no longer draws the nearby sites (#756).
-
A site on the map previews its name when you rest the mouse on it and opens the same side panel as an event; the map draws sites without names (#747).
-
The site side panel on the map reads like the event side panel: the site name links to its page, the owner sits under it, and the latest source shows with its image, above the location and the details (#755).
-
POST /uploadsanswers anUploadListwhoseitemsholds oneUploadReadper staged file, one per frame for a GIF (#744). -
The map draws OpenFreeMap tiles, which need no API key, and credits OpenMapTiles and OpenStreetMap contributors (#709).
-
The map labels only countries and capitals when zoomed out, hides region borders, and shows one name per label, in Latin script (#709).
-
Map labels use the app font, Montserrat, served with the app (#709).
-
The basemap icons are served with the app, or from the instance's own map files when it serves them (#709).
-
In search, you can check your own geolocations, or select every match, and add them to one of your collections at once or open a new collection with them, up to 500 events;
POST /collections/{id}/eventstakes event ids or a search (#702). -
The map's Sites switch moves into the filter panel as its first section; while sites show, the Filters button counts them and a Sites pill turns them off (#720).
-
Search, feed and requests show the active filters at the top of the filter panel on a wide screen, and search puts the result count at the head of the list (#702).
-
The feed's Kind filter offers Detections as a third chip beside Geolocations and Requests, in place of the Show detections switch; no chip still lists all three (#702).
-
Search loads every matching geolocation: Load more under the Geolocations group appends the next page, and
GET /searchpages that group withgeolocations_cursor(#696). -
Sites: map an area of interest such as a depot with its dated satellite images and contours, link your events to it with their effect, and read its history on its page; sites show on the map and can be reported (#644).
-
In the event form, a source link row imports the file of an X, public Telegram or TikTok post in one click, and a post with several files lets you pick one;
POST /uploads/from-linkstages it like an upload (#697). -
Sites work like events: each source filed or removed and each owner edit saves a version you browse in the history, the owner edits name, kind, sources, contours and links on one page, and Submit offers Site and Collection tiles (#718).
-
The profile's source origin counts a platform's aliases as one host:
twitter.comlinks count underx.com,youtu.beunderyoutube.com, andtelegram.meundert.me(#743). -
In the event form, the fold under each source that holds the capture time, capture position, tags and graphic flag reads Capture details instead of More details (#741).
-
More page actions sit in the top right action bar: Post request on the Requests board, Geolocate on a request, Link to a site on your event, New collection and Sign out on your profile, and Create the detection and Import archive on Submit (#751).
-
You approve, decline an approval request, and answer a geolocator or organization invitation from the page's top right action bar; with several identities to approve as, one Approve opens a menu of them (#753).
Removed
- The shared components drop the variants only
/paletteused: the avatar row's+Noverflow and the bare combobox demo (#814). - The landing page no longer shows a roadmap; the open epics on GitHub list what is planned (#767).
Fixed
- A compact item (the map's pin preview, the pickers, the link dialogs) gives its title two lines and ends its detail line in an ellipsis, so the status badge never covers the analyst's name; a list item's long analyst name wraps on a phone (#814).
- The site forms refuse a contour whose corner touches another edge or whose edges overlap, which the server refused after the submit (#814).
- On the map, no Show chip selected shows every event and every site, and selected chips show only what they name: Sites alone hides the events, and Clear all brings the sites back. No zones date sits under the chips (#808).
- A GIF inserted into a proof shows one image per frame, and one past 6 frames is refused under the editor with the reason (#804).
- The submit form keeps its draft across a reload, files and proof images included, until you publish (#804).
- Pasting an X post you already imported says Already imported and links the existing detection, request or event (#802).
- Bulk import refuses a file that is not a zip as soon as you pick or drop it, with one message, instead of failing after the import starts (#802).
- The Detections queue names a detection short of evidence Incomplete everywhere, drops the line under its title, and each row is a link you can open in a new tab (#802).
- A source shows when it was posted on its own Posted row, so an unknown post date no longer reads as an unknown capture date (#800).
- The site edit form no longer shows a missing count on Save before you change anything (#800).
- A latitude or longitude out of bounds or not a number says why under the coordinate fields, and the greyed map link names the real reason (#801).
- The map credits on small maps fit on one line in smaller type instead of wrapping over what the map shows (#801).
- The File a source page of a site has the Go to coordinates field above its zone map, like the site forms (#801).
- Search on All with a tag lists the collections carrying it instead of switching to Events, and a highlighted term reads in the light theme; the conflict list closes on a pick, and the map's filter panel stays clear of the attribution on a phone (#799).
- The home page ends on links to the legal notice and the privacy policy, and the About page sets its Commitments text at the size of its other sections (#797).
- Vercel Web Analytics and Speed Insights load only when the build sets
NEXT_PUBLIC_VERCEL_ANALYTICS=true, so an instance hosted elsewhere no longer makes failing/_vercel/*requests (#797). - On a profile, Insights and Coverage show each count once; Follow and Unfollow move the followers count at once and put it back on an error; Edit profile shows the avatar once and a refused website under its field (#798).
- Opening a page that needs an account while signed out, such as a new collection, a site edit or your profile, sends you to sign in and then back to that page (#796).
- When your session ends because its cookies expired or were cleared, the next page you open says so, the sign-in page included (#796).
- An unsubscribe link opened without its token says the link is incomplete and points to Settings, instead of showing a disabled button (#796).
- A collection's owner no longer sees Report on their own collection (#794).
- On a phone, the pinned actions and the menu button sit on one full-width bar once the page scrolls, so fields and lists no longer show between them (#794).
- On a wide screen, the pinned actions stay on one line, such as Approve, Accept and Decline on an invitation (#794).
- Share shows Link copied in its tooltip when it copies the link, on a tap too (#794).
- The content reports queue names a reported event by its title and author, and the Manage an event picker shows each event's date and author, so two events with the same title stay apart (#793).
- An admin opening a withheld event or collection sees that it is withheld and since when, as on a withheld site (#793).
- The admin console marks a soft-deleted account and offers only the actions that apply to it, sums up what a hard delete erased, and names the action on each event receipt instead of hard or soft (#793).
- The search field's placeholder fits on a phone, search result cards no longer leave an empty band under their details, and an empty collection shows its icon in the Add to collection picker instead of a cramped no media (#789).
- A click on the pill or knob of a switch row now toggles it, not only a click on its label (#792).
- The Light basemap's Region borders switch now draws the borders at every zoom, in a grey that shows on the light map (#792).
- The API reference now marks a collection's
titleanddescriptionas required on create, with their limits, and lists a missing field among the 422 causes (#783). - Search finds an analyst's work by their handle: on All and Events, a word that is an analyst's username lists the events credited to them, the other words narrow those events, and the Analysts group keeps the analyst (#769).
- The event edit and submit forms no longer scroll sideways when the tag field suggests more tags than fit on its line (#775).
- A Telegram post whose text holds a custom emoji now imports with its photo instead of the date alone (#697).