Quickly get to Recurse resources (calendar, github, wiki, etc).
We define keywords and their URL endpoints and then when you type them in your browser bar it takes you there! Ex. typing ‘cal’ into your browser would take you to the Recurse calendar. A visual example
Inspired by bunnylol at Meta. https://developers.facebook.com/blog/post/2020/06/03/build-smart-bookmarking-tool-rust-rocket/
- Keyword-based redirects to common Recurse resources (calendar, Zulip, wiki, etc.)
- CRUD interface for managing keywords
- Auto-redirect to a default search engine (e.g. Google) when keyword is not found
- Low RAM usage
- Parallelizeable - should be able to respond to multiple read/write requests at once
- Reliable - system should be stable and require minimal maintenance/administration
- Durable - data store/keywords should persist between app restarts and reboots
- Full-text search across Recurse data (Zulip, calendar, community, posts, etc.)
- Search result pages within the search engine
- “Not found, did you mean X?” suggestion page
- Auth and permissions for private data (Zulip messages, Recurser info)
- User sets RCLol as custom search engine
- User types query into browser bar
- RCLol webserver receives request and does a lookup
- If found, redirect to URL with arguments passed as query params
- If not found:
- V1: Auto-redirect to a default search engine with the search query
- V2: Show “not found, did you mean X?” suggestion page
Keywords support argument substitution, defined when creating the link.
%sis replaced with all arguments%1,%2, etc. for positional arguments
Examples:
| Keyword | URL Template | Usage | Result |
|---|---|---|---|
| g | google.com/search?q=%s | g recurse center | google.com/search?q=recurse+center |
| cal | recurse.com/calendar | cal | recurse.com/calendar |
| z | zulip.example.com/#q=%s | z machine learning | zulip.example.com/#q=machine+learning |
- RCLol website (running on a local webserver)
- Endpoint for receiving search queries
- UI for managing keywords (CRUD interface)
TBD depending on interested RCers. Could be JavaScript, Python, Ruby, Go, or even Zig. Mostly out of scope for this design doc.
Keyword mappings will live in a key value store (ex. Postres, MySQL, LMDB, Sqlite). Need a system that is durable, low resource usage, linux compatible and has good read performance. Writes are much less frequent than reads.
Keywords:
| col | type | desc |
|---|---|---|
| keyword | string | Keyword to type |
| dest_url | string | destination URL (with placeholders) |
| created_at | time | |
| created_by | int | FK to users.id |
| updated_at | time | |
| updated_by | int | FK to user who most recently updated |
Users - only if we can’t get from oauth:
| col | type | desc |
|---|---|---|
| id | serial | user id |
| name | string | user name |
- Running on RC-local hardware (Heap cluster?)
- Repo will be hosted on recurse org github
- Deployment and installation TBD
V2 search results involving Zulip messages and Recurser names/info will need auth and permissions.
- library - www.libib.com/u/recursecenter
- calendar - recurse.com/calendar
- zulip - recurse.zulipchat.com
- wiki - github.com/recursecenter/wiki/wiki
- community/forum - community.recurse.com
- phoneroom - phoneroom.recurse.com
- rapidriter - rapidriter.rcdis.co
- rcade - rcade.dev
Collect Recurse data and make it searchable. Results displayed as pages within RCLol.
- Rcade info / list of Rcade games
- Recurser names
- Posts
- Zulip messages