# Search Engine Welcome to the Principal Engineer test project! Your task is to build a mini search engine specifically designed for searching programming documentation using existing technologies. - We are looking for displays of technical skill, efficient time use, and good judgement. - We grade relative to the aptitudes being displayed -- we don't expect all applicants to have domain knowledge of the project going into it. - Note that our backend stack uses crystal, python, javascript and rust. It is OK to use other languages, but preferred to align with our existing stack if possible. - Using AI to assist you in coding is fine. However, careless use of AI tools leading to sloppy code or solutions you don't fully understand will be disqualifying. - Feel free to ask questions by email as needed. # System architecture - Select and implement a crawler to crawl over the pages listed at the bottom of this text - The crawler should stay within the provided subdomain/domain/path restrictions. - If you find that proxy use would be needed to improve crawling, you can skip this and explain how you would architect a crawler with proxying. ### Index - Choose the database architecture of your choice for storing crawl results, indexing, and retrieving from indexed results. Please explain your decision in the project's README file. You can use a single database for everything, multiple databases, hand managed flat file pipelines, etc. as you wish. - While this project is on a small amount of data, assume this would be built to scale in the range of 1PB for the amount of data being indexed. - The maximum allowable search latency is 50ms. This should remain true if we scaled the DB to 1PB. Explain how you would scale your system, but you can implement a single-node version. - Bonus points for supporting both a classical index as well as an embedding based retrieval over results. # User Interface - The final search engine should be deployed at a publicly accessible URL. - Provide a simple interface for your search engine: an input box for the query and a display of the 10 most relevant search results. Each result should include the title, link, and a relevant snippet from the page. - Display the query latency above the results. - Include a basic page to show the number of indexed pages per domain, along with any other useful statistics you’d like to present. # Documentation 1. Include documentation allowing us to build your project from scratch by following it. Include a link to a cloud drive/bucket to download relevant data as necessary, so we don't have to re-run a full crawl to replicate results. 2. Explain architectural choices you've made. 3. Describe the challenges you encountered during crawling, indexing, and ranking, as well as the solutions you implemented. We're interested in that. If you wasted 3 days on a dead path, tell us about it and what you learned. 4. Explain how you optimized ranking to achieve high relevancy in the search results. 5. We want the documentation to be concise and human readable. If you use AI to generate a README for you, spend the time to edit it and make it easy for us to review. # Deliverables 1. A GitHub repository containing the project and accompanying documentation. 2. A live deployment of the search engine for testing. Prioritize both search relevancy and latency. Good luck! # Domains You can limit your crawling to the following domains: angular.io api.drupal.org api.haxe.org api.qunitjs.com babeljs.io backbonejs.org bazel.build bluebirdjs.com bower.io cfdocs.org clojure.org clojuredocs.org codecept.io codeception.com codeigniter.com coffeescript.org cran.r-project.org crystal-lang.org forum.crystal-lang.org css-tricks.com dart.dev dev.mysql.com developer.apple.com developer.mozilla.org developer.wordpress.org doc.deno.land doc.rust-lang.org docs.astro.build docs.aws.amazon.com docs.brew.sh docs.chef.io docs.cypress.io docs.influxdata.com docs.julialang.org docs.microsoft.com docs.npmjs.com docs.oracle.com docs.phalconphp.com docs.python.org docs.rs docs.ruby-lang.org docs.saltproject.io docs.wagtail.org doctrine-project.org docwiki.embarcadero.com eigen.tuxfamily.org elixir-lang.org elm-lang.org en.cppreference.com enzymejs.github.io erights.org erlang.org esbuild.github.io eslint.org expressjs.com fastapi.tiangolo.com flow.org fortran90.org fsharp.org getbootstrap.com getcomposer.org git-scm.com gnu.org gnucobol.sourceforge.io go.dev golang.org graphite.readthedocs.io groovy-lang.org gruntjs.com handlebarsjs.com haskell.org hex.pm hexdocs.pm httpd.apache.org i3wm.org jasmine.github.io javascript.info jekyllrb.com jsdoc.app julialang.org knockoutjs.com kotlinlang.org laravel.com latexref.xyz learn.microsoft.com lesscss.org love2d.org lua.org man7.org mariadb.com mochajs.org modernizr.com momentjs.com mongoosejs.com next.router.vuejs.org next.vuex.vuejs.org nginx.org nim-lang.org nixos.org nodejs.org npmjs.com ocaml.org odin-lang.org openjdk.java.net opentsdb.net perldoc.perl.org php.net playwright.dev pointclouds.org postgresql.org prettier.io pugjs.org pydata.org pytorch.org qt.io r-project.org react-bootstrap.github.io reactivex.io reactjs.org reactnative.dev reactrouterdotcom.fly.dev readthedocs.io readthedocs.org redis.io redux.js.org requirejs.org rethinkdb.com ruby-doc.org ruby-lang.org rust-lang.org rxjs.dev sass-lang.com scala-lang.org scikit-image.org scikit-learn.org spring.io sqlite.org stdlib.ponylang.io superuser.com svelte.dev swift.org tailwindcss.com twig.symfony.com typescriptlang.org underscorejs.org vitejs.dev vitest.dev vuejs.org vueuse.org webpack.js.org wiki.archlinux.org www.chaijs.com www.electronjs.org www.gnu.org www.hammerspoon.org www.khronos.org www.lua.org www.php.net/manual/en/ www.pygame.org www.rubydoc.info www.statsmodels.org www.tcl.tk www.terraform.io www.vagrantup.com www.yiiframework.com yarnpkg.com