Go to file
Olivier 'reivilibre' 8e3a44ee5e Start moving Nix Flake into the root 2022-06-04 22:30:17 +01:00
.ci Sort out lack of Python (only in ARM64 build for some reason) 2022-04-07 23:07:15 +01:00
docs STASH notes about seeds 2022-03-20 15:20:13 +00:00
nixos_modules Start moving Nix Flake into the root 2022-06-04 22:30:17 +01:00
quickpeep Fix unified config in web 2022-04-06 21:50:17 +01:00
quickpeep_densedoc Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
quickpeep_index Publish and use fancy_mdbx and metrics-process-promstyle 2022-04-01 22:47:52 +01:00
quickpeep_indexer Use the unified config in the indexer 2022-04-06 21:49:40 +01:00
quickpeep_moz_readability Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
quickpeep_raker Use the unified config in the raker 2022-04-05 17:50:55 +01:00
quickpeep_seed_parser Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
quickpeep_static Add proof-of-concept search UI page 2022-03-25 23:39:27 +00:00
quickpeep_structs Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
quickpeep_utils Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
scripts Clean-ups and support pulling out references 2022-03-14 23:01:19 +00:00
test_vm Start moving Nix Flake into the root 2022-06-04 22:30:17 +01:00
.env Initial working version of the seed collection service 2022-03-16 19:53:08 +00:00
.gitignore Start moving Nix Flake into the root 2022-06-04 22:30:17 +01:00
Cargo.lock Use the unified config in the indexer 2022-04-06 21:49:40 +01:00
Cargo.toml Use published fork of Cylon 2022-04-01 22:53:05 +01:00
FLAKE.md Start moving Nix Flake into the root 2022-06-04 22:30:17 +01:00
LICENCE.Apache2 Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
LICENCE.MIT Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
README.md Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
book.toml Add CI config 2022-03-17 23:52:41 +00:00
deny.toml Add MIT/Apache2 licence 2022-04-01 22:25:06 +01:00
flake.lock Start moving Nix Flake into the root 2022-06-04 22:30:17 +01:00
flake.nix Start moving Nix Flake into the root 2022-06-04 22:30:17 +01:00
quickpeep.sample.ron Use the unified config in the indexer 2022-04-06 21:49:40 +01:00

README.md

QuickPeep

Small-scale 'artisanal web' search engine project, favouring quality over completeness.

Motivation

Modern web search can be rubbish. It feels like I'm getting the same websites time and time again, and that I rarely manage to come across small, independent websites instead of content/SEO mills.

Typical modern websites are rubbish. They bother you with adverts, annoying nagging pop-ups (often loaded with dark patterns), privacy-disregarding trackers and slow-loading content that relies on needless amounts of JavaScript to display plain rich text that has been possible with pure HTML for decades.

QuickPeep aims to index good-quality websites, favouring small personal sites (such as blogs), whilst cutting out the rubbish. Websites that don't care about the reader's experience are not welcome; QuickPeep will detect pop-up nags, adverts and privacy issues in order to keep them away.

As a separate issue, many websites decide to use CloudFlare to intercept their traffic. This is not in the spirit of the decentralised web; CloudFlare becomes a single party that, if compromised or dishonest, could exert a disproportional amount of power over users. One notable example of this is that they bombard privacy-seeking users on VPNs or Tor with needless CAPTCHAs, giving them a worse experience on a lot of the web. These websites will be detected so that they can be filtered out at will.

QuickPeep will follow the trade-off of preferring not to provide any results rather than to provide results laced with rubbish. If you need to fall back to a conventional search engine, this will eventually be possible to do right within QuickPeep...

Features

Crossed-out things are aspirational and not yet implemented.

  • Shareable 'rakepacks', so that anyone can run their own search instance without needing to rake (crawl) themselves
    • Dense encoding to minimise disk space usage; compressed with Zstd?
  • Raking (crawling) support for
    • HTML (including redirecting to Canonical URLs)
      • Language detection
    • Redirects
    • Gemtext over Gemini
    • RSS, Atom and JSON feeds
    • XML Sitemaps
  • Detection of anti-features, with ability to block or downrate as desired:
    • CloudFlare
    • Adverts
    • Nagging pop-ups
    • Trackers
  • Article content extraction, to provide more weight to words found within the article content (based on a Rust version of Mozilla's Readability engine)
  • (Misc)
    • Use of the Public Suffix List
    • Tagging URL patterns; e.g. to mark documentation as 'old'.
  • Page duplicate content detection (e.g. to detect / and /index.html, or non-HTTPS and HTTPS, or non-www and www...)
  • Language detection for pages that don't have that metadata available.

Limitations

  • Only supports English (and English dialects) for now.
    • Should hopefully be customisable later on, but even though I can speak some foreign languages, I don't know any communities to start with to seed non-English search.
  • Websites have to be manually allowed and tagged.
    • It's otherwise difficult to know how to detect good-quality sites automatically, or to tag what they are.
    • There may be ways to improve this; e.g. with machine learning techniques or crowdsourcing of data.
  • The search index needs to remain small enough to be usable on modest hardware, so there's no way we can hope to index everything.

Architecture

Not written yet.

Development and Running

Not written yet.

Helper scripts

scripts contains some helper scripts, which you probably need to run before operating QuickPeep:

  • get_cf_ips.sh: fetches IP addresses ued for CloudFlare detection.
  • get_adblock_filters.sh: fetches adblock filters used to detect nags/adverts/trackers.

Licence

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 licence, shall be dual licensed as above, without any additional terms or conditions.