Alan4 downloadsA local sourcing notebook with source maps, nested areas, visits and shared parking.
An Obsidian plugin for planning sourcing trips, remembering places and recording visits. Version 0.11.1 is an early release for desktop and Android. Your records remain readable Markdown and YAML; inventory and sales can stay in your existing tools.
Download the 0.11.1 release for desktop or Android. Source: an1uk/obsidian-reseller-sourcing. The plugin is not yet listed in Community Plugins.
Enable Reseller sourcing, then use its store ribbon button or Reseller sourcing: Open Home. The native Sourcing workspace has four destinations: Home, Places, Outings and History. Desktop uses a navigation rail; Android uses a bottom bar. It opens when requested and keeps the rest of your Obsidian workspace available.
Home offers one main action: Add your first place, Continue outing, Continue planning, or Choose where to go. Record a visit and Find a place are quieter shortcuts. Saved for later holds drafts and other plans. Not now removes a preparation from the prominent position without deleting it. Nothing resumes automatically.
More contains capture review, examples, help, settings and template maintenance. Records open inside the workspace; Open note opens their Markdown files. Filters, expanded sections and scrolling stay local to each pane and device.
Back keeps progress. Meaningful preparation changes save after a short pause and flush on close or backgrounding. Saving, saved and failed states are shown. Interrupted completion uses durable receipts so retrying does not create another outing.
Active outings lead with the current stop, directions and Record visit. Saving a visit returns to the outing. Stops can also be skipped or marked visited without notes; finished outings retain their visit history.
The optional local planner defaults to Fit opening hours, 20 minutes per source, miles, and finishing at the last source. Return to start is optional. It supports a start, date, departure time, timezone, endpoint, deadline and per-source overrides. Suggestions use straight-line estimates and recognised weekly hours. They require review and are not optimal road routes or live traffic calculations.
Google Maps export previews retain every selected destination, including shared parking and endpoints. Android app, desktop and mobile-browser profiles target nine, ten and four destinations respectively, subject to Google's URL-length limit. Larger journeys split into numbered parts continuing from the preceding endpoint. Receiving handlers can behave differently; review each imported route. See validation and limitations.
Manual place creation requires only a name. Area, location and other details can follow. Unassigned places remain visible. Source type defaults to Charity shop and is configurable; an explicit selection takes precedence, and changing the default is opt-in.
Places provides search, List/Map and filters. More views retains Bases tables, grouping, sorting and Google comparisons. A place leads with its assessment, takeaway, latest reminder, Record visit, Directions and shortlist control. Overview, Map, Visits and Details separate everyday actions from contacts, organisation and captured details.
Visit forms keep source, editable visit date, items purchased and quick note visible. Blank purchases means unknown; zero means nothing bought. Haul details, stock colours, finds, reminders and assessment updates are expandable. Save visit records the entry; Close leaves its draft saved. Recording a visit does not clear the shortlist or silently change the current assessment.
History offers All visits, This week, Previous week and Custom dates, with Monday–Sunday weeks. Insights compares visits, purchases, whole-haul potential and stock-colour observations. Small samples and uncertainty remain visible; stock colours are observations rather than predictions. Sourcing ratings are 0 = unrated or 0.5–5 in half-star steps, separately from Google ratings.
Free OpenFreeMap backgrounds use OpenStreetMap data with visible attribution. Place maps start close up; area maps fit their pins with padding. Marker taps open persistent popups. Coordinate and saved-camera actions are available. Location is requested only after an explicit action and stops when the map closes or the app backgrounds. Map failures offer retry while records remain usable.
A parking location can serve several sources, and a source can have several alternatives. Link parking or place a new pin from a source map. Choose a preferred location or select one for an outing. Driving shows the selected parking destination; walking targets the source. Missing parking coordinates do not silently become shop coordinates.
Desktop Obsidian Web Clipper templates are v0.4.2: Source v0.4.2 — Google Maps and Parking v0.4.2 — Google Maps. Open More → Web Clipper templates for export/import instructions. The plugin cannot silently replace templates inside a browser extension. Android provides desktop-capture instructions and copyable paths.
Clip an individual listing. Missing fields remain blank; map-centre coordinates are never treated as the destination. Capture review requires a town and permits an optional locality, with supported address suggestions and editable remembered hints. Saving creates any required areas; cancelling creates none. Browser extraction can change when Google changes its page structure.
A fresh source capture matching an exact saved listing or canonical Google identity opens Review source updates. Review name, URL, address, contacts, hours, score/count snapshot, topics and validated coordinates. Nonempty changes are preselected; coordinate changes are unchecked. Missing data cannot erase existing values. Personal assessments, visits, parking, prose, filenames and area remain unchanged. Cancelling leaves a capture pending; Keep existing and archive capture explicitly dismisses it. Parking refresh is outside this version.
The configurable notebook folder defaults to Reseller sourcing:
Home.md Workspace launcher
Places/Exampletown/Area.md Town record
Places/Exampletown/Riverside/ Sources, parking and optional child area
Places/Unassigned/ Places awaiting organisation
Visits/YYYY/MM/ New visits organised by actual visit date
Outings/YYYY/MM/ Dated outings
Capture inbox/ Web Clipper destination
System/ Views, templates, processed captures and recovery
Examples/ Isolated practice notebook
Editing a historical visit date preserves its existing path. Markdown stays readable without the plugin; interactive controls require it.
Add examples, under More or settings, installs example pack v5 on request: 24 fictional sources, eight parking locations, three towns, six localities, 40 visits, four outings and six prepared captures. All observations, reviews and contacts are invented. Practice actions use isolated drafts, preferences and receipts. Fictional external actions preview their destinations instead of opening them.
The optional Guided tour can be deleted independently. Deleted example records or the entire Examples folder remain deleted across reopening, repairs and updates. Existing example packs are not rewritten or automatically restored. Earlier pack versions remain available only for explicitly continuing an interrupted installation.
For the ready-to-install package, download charity-sourcing-0.11.1.zip from the release page. The same release also provides main.js, manifest.json and styles.css separately, plus release-checksums.json with SHA-256 hashes. Desktop and Android use the same files. Follow the manual installation steps below.
Use Node.js 22 or newer and npm:
git clone https://github.com/an1uk/obsidian-reseller-sourcing.git
cd obsidian-reseller-sourcing
npm ci
npm run lint
npm run package
npm test
npm run package type-checks and builds the plugin, then creates a universal ZIP, standard release assets and checksums in dist/. npm run build builds without packaging. Generated files and dependencies are excluded from Git.
Source checks use the official Obsidian ESLint and Stylelint configurations, with explicit type-safety checks and zero-warning gates. CI runs with read-only permissions on source changes and pull requests. Only version-tag pushes can attest and publish; the standard release contains the exact five verified build assets. To verify a downloaded asset with GitHub CLI, run gh attestation verify <file> --repo an1uk/obsidian-reseller-sourcing. The ZIP and checksums are conveniences for manual installation; Obsidian installs only main.js, manifest.json and styles.css.
Desktop and Android use the same plugin ID charity-sourcing, version, and three assets: main.js, manifest.json, styles.css. Minimum Obsidian version is 1.14.4. No separate Android build or APK is needed.
For manual installation, close Obsidian, extract the ZIP's charity-sourcing folder into your vault's .obsidian/plugins/, reopen Obsidian and enable Reseller sourcing under Community plugins. Alternatively, copy the three assets from dist/release/ into that folder. On Android, use a file manager with access to the vault. Back up an existing installation before replacing its three assets, and preserve its data.json settings file. Start with a separate test vault while evaluating this early release.
The portable test suite skips three optional integration checks unless CLIPPER_TEST_HARNESS_DIR points to a locally supplied harness for the installed Web Clipper/compiler and native Bases formula integration. That harness is not distributed here. The remaining tests do not require it. See VALIDATION.md for the distinction between portable tests and historical native/device acceptance.
To attach an already-synced notebook on another device, let your existing sync method finish, then choose Use existing notebook in setup. Inspection is read-only; explicit attachment saves local settings without repairing or rewriting notes. The plugin includes no sync transport. Desktop folder and Chrome actions are guarded and unavailable on Android.
Routine browsing traverses the selected notebook. Explicit notebook attachment discovers candidate notebooks, and reviewed moves inspect relevant vault links to preserve backlinks and recovery. Clipboard copying occurs only after a user chooses a Copy action. The plugin writes the selected text; it never reads clipboard contents. If copying is unavailable, it provides selectable text instead.
This project is MIT licensed; see LICENSE. The map implementation is adapted from Obsidian Maps 0.2.2, MIT © 2025 Obsidian, pinned at 8703e98013fa20fb188746d24664452f41b17227. See THIRD-PARTY-NOTICES.md, licenses/UPSTREAM.md and the plugin's About / Credits.
MapLibre and runtime dependency notices are packaged. Complete licence texts are embedded in main.js and readable/copyable in About / Credits, including a three-file installation. OpenFreeMap, OpenMapTiles and OpenStreetMap attribution is retained.