A self-hosted, customizable and ad-free Google Search experience

Overview

Giggle

A self-hosted, customizable and ad-free Google Search experience.

What does it do?

Giggle lets you run Google searches against allow- and block-lists in an easy way. You create lists of sites to include or exclude in Google's Programmable Search Engine service and Giggle will pick them up for use.

How it works

After installation, Giggle logs into Google for you to gather a list of your Custom Search Engines. When you perform a search, you select the engine to use from a dropdown and Giggle uses your Developer API key to execute a search against it. Everything is self-hosted so your credentials and data belong to you.

How it looks

Here's a glimpse of the homepage, it may look familiar 🙂

giggle_homepage

Your results contain no ads and are restricted to the sites you configure in the Programmable Search Engine console.

giggle_results

Getting Started

Giggle is self-hosted meaning you may host it any way you like or just run it locally. It uses NextJS so development and deployments are super easy.

What you'll need

  • Some technical knowledge - I'll walk you through it in this README. If you don't already have them, you'll need NodeJS and yarn package manager.
  • A Google account without MFA - You'll need to inject its username and password as environment variables. If you're curious/concerned about how they're used, check out this file. Basically, Giggle uses Puppeteer to log in to Google in order to retrieve your custom search engine IDs. If you do not have an account without MFA, just go ahead and make a new one - ⚠️ MAKE SURE NOT TO TURN ON MFA! ⚠️
  • A Google Developer API key with Custom Search API privileges - Giggle uses your API key to run queries against your search engines to retrieve JSON results without ads. Head over to the Developer Console to set this up. Each engine gets 100 queries per day for free 💰
  • At least one custom search engine configured in the Google account's Programmable Search Engine console - Your console should look something like this:

programmable_search_engine

Setup

  • Open a new Terminal window
  • Clone this repository with git clone https://github.com/dan-lovelace/giggle.git
  • Change into the new directory with something like cd giggle
  • Create an empty .env file with touch .env
  • Open the .env file and paste in the following template, then update the values with your own:
GOOGLE_USERNAME=your_email
GOOGLE_PASSWORD=your_password
GOOGLE_API_KEY=your_api_key
  • Run yarn to install dependencies
  • Run yarn build to create a new build
  • Run yarn start and wait for it to change to the ready state
  • Navigate to http://localhost:3000 in a browser
  • If everything went right, you should see the Giggle homepage after a few seconds (the first time loading is a bit slower than usual)

Troubleshooting

  • If you made a new Google account, it's possible the first couple login attempts by Giggle will fail due to being prompted to confirm a phone number. Try refreshing the page. You may also check the Puppeteer output in puppeteer/screenshots for any insight. If you continue having trouble, try increasing the waitForTimeout values in pages/api/engines.ts from 500 to 1000 and rebuilding.
  • If you see an error saying something like "No engines found," make sure at least one search engine exists in your Programmable Search Engine console.
  • Feel free to open a GitHub issue if you need additional help.

Development

Run yarn dev to get started using the dev server.

Note: yarn dev starts a local instance without API caching which may run up your search request limits rather quickly. There is some mock implementation in pages/api/search.ts which will avoid hitting your engine's API during development. Uncomment the MOCK USAGE section and comment the REAL USAGE to use it. Mocking the search API uses the JSON located in mocks/results-recipes.json.

Testing

Giggle's tests are written using Cypress and can be run with either of these commands:

  • yarn cypress:open - Opens a Cypress runner for testing individual spec files.
  • yarn cypress:run - Executes all tests in series.

Contribution

If you'd like to contribute, feel free to open a PR any time. Please abide by these guidelines:

  • Add new tests as necessary
  • Make sure the tests pass with yarn cypress:run
  • Include a description about the changes and why you think they're necessary

What's Next?

I'd like to build some sort of annotation management system to avoid having to manually create/update individual engines in the web console. It would be reduced to creating a single engine and Giggle would swap out annotation files on-the-fly. It would be much more ideal since you'd never need to visit Google's console again but it could turn out to be painfully slow. Let me know in GitHub issues if this interests you.

Also in the cards could be a fully-managed service including hosting. Users would need to hand over their own Google login credentials and API key which I can understand being hesitant about. If that's something you're interested in, please open a GitHub issue and start the conversation.

The mobile experience could be better.

You might also like...

A self-hosted file sharing platform.

A self-hosted file sharing platform.

Pingvin Share Pingvin Share is a self-hosted file sharing platform made for the Appwrite Hackathon. 🎪 Showcase Demo: https://pingvin-share.dev.eliass

Jan 7, 2023

CDK constructs for self-hosted GitHub Actions runners

GitHub Self-Hosted Runners CDK Constructs Use this CDK construct to create ephemeral self-hosted GitHub runners on-demand inside your AWS account. Eas

Dec 20, 2022

⛺️ Tipi is a homeserver for everyone! One command setup, one click installs for your favorites self-hosted apps. ✨

⛺️ Tipi is a homeserver for everyone! One command setup, one click installs for your favorites self-hosted apps. ✨

⛺️ Tipi — A personal homeserver for everyone ⚠️ Tipi is still at an early stage of development and issues are to be expected. Feel free to open an iss

Jan 4, 2023

Self-hosted TOTP authenticator PWA with FIDO2 (WebAuthn)

Self-hosted TOTP authenticator PWA with FIDO2 (WebAuthn)

pasu Self-hosted TOTP authenticator PWA with FIDO2 (WebAuthn) Features 2FA secrets stored in your own server instead of your own device Codes are gene

Nov 2, 2022

A self-hosted eBooks Library for your family or yourself.

A self-hosted eBooks Library for your family or yourself.

What is BookStairs? BookStairs is an open-source personal EPUB library which was highly inspired by talebook, calibre-web and BookBrowser. It's design

Dec 29, 2022

SCAchat - A self-hosted chatting application

SCAchat - A self-hosted chatting application

SCAchat is a self-hosted chatting application similar to AOL Instant Messenger. The chatting application is privacy-respecting and does not store any messages or user-data. Once a session has ended, all messages are gone.

Jul 18, 2022

Self-hosted Slack bot to run your code snippets

slack-code-runner Self-hosted Slack bot to run your code snippets Prerequisites Docker Usage Create a new Slack app and add it to your workspace. You

Sep 14, 2022

A self-hosted streamable alternative

What is Clippy? Clippy is a self-hosted streamable alternative Usage docker-compose (recommended) version: '3' services: clippy: image: samfry13

Sep 17, 2022

Self-hosted open source social media marketing

Self-hosted open source social media marketing

OpenSMM Description OpenSMM(Open Social Media Marketing) is a self-hosted social media marketing platform built to assist small businesses manage thei

Dec 23, 2022
Owner
Dan Lovelace
Dan Lovelace
An open source, self-hosted, and entirely free solution to social media management.

An open source, self-hosted, and entirely free solution to social media management. Status ?? In Development ?? Shoutify is currently early in the dev

TechSquidTV 202 Dec 22, 2022
A serverless guestbook hosted on Github Pages. Powered for free by Google.

Serverless-Guestbook Features: 100% free, pure CSS form validation, profanity filter, lightweight, easy to setup & easy to use! Don't forget to check

Marketing Pipeline 9 Dec 20, 2022
"Jira Search Helper" is a project to search more detail view and support highlight than original jira search

Jira Search Helper What is Jira Search Helper? "Jira Search Helper" is a project to search more detail view and support highlight than original jira s

null 41 Dec 23, 2022
Google Clone using NEXT JS ,SSR, Tailwind and Google API's to search data.

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Hamnaikbalkhan 7 Sep 23, 2022
A self-hosted solution for backing up and viewing backed up mobile photos

Photostore Photostore is a self-hosted, client-server solution for backing up, viewing and downloading photos. How it works The Photostore API (writte

null 38 Oct 25, 2022
An ultra-lightweight self-hosted CI solution with a dashboard and containerized runners

An extremely simple containerized CI server. Ecosystem The Candor ecosystem is straightforward, and entirely containerized. Docker runs on the host ma

Paul Huebner 8 Nov 20, 2022
A self-hosted solution for creating/managing forms and applications.

Centox - Self-hosted form website It is a self-hosted solution for creating/managing forms and applications. Users can login using their Discord Accou

Simon Maribo 11 Dec 26, 2022
An open-source and self-hosted assessment platform for recruitment

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Kaen 2 Oct 4, 2022
A fancy self-hosted monitoring tool

Uptime Kuma It is a self-hosted monitoring tool like "Uptime Robot". Features Monitoring uptime for HTTP(s) / TCP / Ping. Fancy, Reactive, Fast UI/UX.

Louis Lam 27.4k Jan 3, 2023
Self-hosted environment variable management platform

envplat - environment platform This project is under development. Please contact me for any information or collaboration. Self-hosted environment vari

Environment Platform 4 Apr 25, 2022