{"id":32779219,"url":"https://github.com/bluewave-labs/guidefox","last_synced_at":"2026-01-20T03:02:49.781Z","repository":{"id":233282110,"uuid":"786416555","full_name":"bluewave-labs/guidefox","owner":"bluewave-labs","description":"Serve your users and increase product adoption with hints, popups, banners and helper links.","archived":false,"fork":false,"pushed_at":"2025-06-10T13:28:47.000Z","size":10558,"stargazers_count":134,"open_issues_count":4,"forks_count":50,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-14T01:37:07.214Z","etag":null,"topics":["digital-experience","digital-experiences","good-first-issue","good-first-issues","internship","javascript","onboarding","up-for-grabs","user-experience","user-flow","user-onboarding"],"latest_commit_sha":null,"homepage":"https://guidefox.io/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bluewave-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-14T11:57:22.000Z","updated_at":"2026-01-04T15:46:16.000Z","dependencies_parsed_at":"2024-12-06T19:26:14.714Z","dependency_job_id":"c27ce3ac-0756-4679-b2f2-d4855ab5a22b","html_url":"https://github.com/bluewave-labs/guidefox","commit_stats":null,"previous_names":["bluewave-labs/onboarding","bluewave-labs/bluewave-onboarding","bluewave-labs/guidefox"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bluewave-labs/guidefox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluewave-labs%2Fguidefox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluewave-labs%2Fguidefox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluewave-labs%2Fguidefox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluewave-labs%2Fguidefox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bluewave-labs","download_url":"https://codeload.github.com/bluewave-labs/guidefox/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluewave-labs%2Fguidefox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28594958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T02:08:49.799Z","status":"ssl_error","status_checked_at":"2026-01-20T02:08:44.148Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["digital-experience","digital-experiences","good-first-issue","good-first-issues","internship","javascript","onboarding","up-for-grabs","user-experience","user-flow","user-onboarding"],"created_at":"2025-11-04T16:01:09.536Z","updated_at":"2026-01-20T03:02:49.775Z","avatar_url":"https://github.com/bluewave-labs.png","language":"JavaScript","readme":"![](https://img.shields.io/github/license/bluewave-labs/guidefox)\n![](https://img.shields.io/github/repo-size/bluewave-labs/guidefox)\n![](https://img.shields.io/github/commit-activity/w/bluewave-labs/guidefox)\n![](https://img.shields.io/github/last-commit/bluewave-labs/guidefox)\n![](https://img.shields.io/github/languages/top/bluewave-labs/guidefox)\n![](https://img.shields.io/github/issues-pr/bluewave-labs/guidefox)\n![](https://img.shields.io/github/issues/bluewave-labs/guidefox)\n\n# Guidefox\n\nGuidefox helps app owners build knowledge and user-experience oriented apps. It includes the following features: \n\n- Welcome tours \n- Popups\n- Banners\n- Helper links\n- Hints\n\nIt also provides an extension to easily fill target elements for hints and tours.\n\nTo see a demo, [click here](https://guidefox-demo.bluewavelabs.ca/). If you have any questions, you can use the [Guidefox forum](https://github.com/bluewave-labs/guidefox/discussions).\n\nThe source code is available under GNU AGPLv3. If you would like to support us, please consider giving it a ⭐ and click on \"watch\" so you can latest news from us.\n\n\n\nhttps://github.com/user-attachments/assets/65331a0a-5c8d-40c0-94f5-7d754a159de7\n\n\n\n\n\n## Tech stack\n\n- [ReactJs](https://react.dev/)\n- [MUI (React framework)](https://mui.com/)\n- [Node.js](https://nodejs.org/en)\n- [PostgreSQL](https://postgresql.org)\n\n## For Local Use\n\nMake sure docker and git is installed\n\n1. Clone the project\n\n`git clone https://github.com/bluewave-labs/guidefox.git`\n\n2. Navigate to the project directory\n\n`cd guidefox`\n\n3. Run docker\n\n`docker compose -f docker-compose.prod.yml build` or `npm run docker-build:prod`\n\nthen\n\n`docker compose -f docker-compose.prod.yml up` or `npm run docker-up:prod`\n\n## Server Installation\n\n1. Make sure Docker is installed to your machine where the server will run.\n2. Make sure git is installed to your machine.\n3. Make sure nginx is installed.\n\n4. Clone GitHub Repository\n\n```\ncd ~\ngit clone https://github.com/bluewave-labs/guidefox.git\ncd bluewave-onboarding\n```\n\n5. Configure Nginx\n\nOpen the Nginx configuration file:\n\n`sudo nano /etc/nginx/sites-available/guidefox`\n\n\nAdd the following configuration. Change YOUR_DOMAIN_NAME with your domain name:\n\n```\nserver {\n    listen 80;\n    server_name YOUR_DOMAIN_NAME;\n\n    location / {\n        proxy_pass http://localhost:81; # Frontend React app\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    location /api/ {\n        proxy_pass http://localhost:3000; # Backend API\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n    location /mailhog/ {\n        proxy_pass http://localhost:8025; # MailHog web interface\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_cache_bypass $http_upgrade;\n    }\n}\n```\n\n6. [Optional] Create a symbolic link to enable the configuration:\n\n`sudo ln -s /etc/nginx/sites-available/guidefox /etc/nginx/sites-enabled/`\n\n7. [Optional] Install Certbot and its Nginx plugin:\n\n`sudo apt install certbot python3-certbot-nginx`\n\nMake sure you have `/etc/letsencrypt/options-ssl-nginx.conf` If not you can get it from https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf\n\n8. Obtain SSL Certificate. Run Certbot to obtain a certificate for your domain:\n\n`sudo certbot --nginx`\n\n9. Verify the Nginx configuration:\n\n`sudo nginx -t`\n\n10. Restart Nginx to apply the changes:\n\n`sudo systemctl restart nginx`\n\n11. Start the project\n\n`cd ~/guidefox\ndocker compose up -d`\n\n## Environment variables\n\nIn order to the project to run safely and correctly, the user should add their own environment variables. They can be added to the .env file in the backend directory of the project. The following is the list of environment variables that should be added and its description:\n\n1. Node Env\n\n```env\nNODE_ENV - node environment (production, test or development)\n```\n\nIt is set from the .env file in the root directory\n\n2. Backend Url\n\n```\nBASE_URL - Backend url\n```\n\nIt is set from ./frontend/src/utils/constant.js\n\n3. Database credentials\n\nIn the root folder\n\n```env\nPOSTGRES_USER - Database username (The same as DB_USERNAME)\nPOSTGRES_PASSWORD -Database password (The same as DB_PASSWORD)\nPOSTGRES_DB - Database name (The same as DB_NAME)\n```\n\nIn the backend folder\n\n```env\nDB_USERNAME - Database username\nDB_PASSWORD - Database password\nDB_NAME - Database name\nDB_HOST - Database host\nDB_PORT - Database port\nTEST_DB_USERNAME - Test database username\nTEST_DB_PASSWORD - Test database password\nTEST_DB_NAME - Test database name\nTEST_DB_HOST - Test database host\nTEST_DB_PORT - Test database port\n```\n\n4. Email service configuration\n   For the email service to run correctly, the user should add their own email credentials\n\n```env\nEMAIL_ENABLE - Enable email service (boolean)\nEMAIL_HOST - Email host\nEMAIL_PORT - Email port\nEMAIL - Email\nAPP_PASSWORD - Email password\nFRONTEND_URL - Url of the frontend server\n```\n\nExample configuration:\n\n```env\nEMAIL_ENABLE=true\nEMAIL_HOST=smtp.gmail.com\nEMAIL_PORT=587\nEMAIL=your-email@example.com\nAPP_PASSWORD=your-app-specific-password\nFRONTEND_URL=https://www.frontendserver.com\n```\n\nNote: When using Gmail, you'll need to enable 2-factor authentication and generate an App Password.\n\n5. JWT Secret Key\n\n```env\nJWT_SECRET - secret key to sign the JWT token\n```\n\n- Use a strong, random secret key (minimum 32 characters)\n\n6. Enable IP check for the API\n   If the ENABLE_IP_CHECK is set to true, but the ALLOWED_IP_RANGE and ALLOWED_IPS are not set, the API will work for all IP addresses.\n\n```env\nENABLE_IP_CHECK - Enable IP check for the API (boolean)\nALLOWED_IP_RANGE - Allowed IP range for the API with the format \"baseIp/rangeStart-rangeEnd\" (e.g. 192.168.1/1-255) separated by comma\nALLOWED_IPS - Allowed IP addresses for the API separated by comma\n```\n\nExample configuration:\n\n```env\nENABLE_IP_CHECK=true\nALLOWED_IP_RANGE=192.168.1/1-255,10.0.0/1-100\nALLOWED_IPS=203.0.113.1,203.0.113.2\n```\n\nNote: For security reasons, it's recommended to always set either ALLOWED_IP_RANGE or ALLOWED_IPS when ENABLE_IP_CHECK is true.\n\n7. In .env.test file, the user should have the following environment variables, so the postgres container can run correctly:\n\n```env\nPOSTGRES_USER - Test database username (The same as TEST_DB_USERNAME)\nPOSTGRES_PASSWORD - Test database password (The same as TEST_DB_PASSWORD)\nPOSTGRES_DB - Test database name (The same as TEST_DB_NAME)\n```\n\nFor running tests in windows installing `win-node-env` module is recommended\n\n## Showing guides on the screen\n\nAfter setting up the project, copy and paste the script that can be found in the Code tab of the Settings. Modify Api Base URL to point out to the url of tour backend server. The code snippet can also be found here:\n\n```\nwindow.bwApiBaseUrl = 'https://guidefox-demo.bluewavelabs.ca/api/';\n                window.bwAgentBaseUrl = 'https://cdn.jsdelivr.net/gh/bluewave-labs/bluewave-onboarding@agent-1.1.5/jsAgent/';\n\n                var s=document.createElement(\"script\");\n                s.type=\"text/javascript\";\n                s.async=false;\n                s.onerror=()=\u003e{console.log(\"onboard not loaded\");};\n                s.src = window.bwAgentBaseUrl + '/main.js';\n                (document.getElementsByTagName(\"head\")[0] || document.getElementsByTagName(\"body\")[0]).appendChild(s);\n```\n\nWe are working on a browser extention to move this code there to improve the user experience.\n\n## Extension\n\nOur extension will be available on the Chrome Web Store soon. In the meantime, developers can manually load the extension by navigating to Extensions → Manage Extensions → Load unpacked and selecting the extension folder.\n\n## Contributing\n\nWe pride ourselves on building strong connections with contributors at every level. Don’t hold back — jump in, contribute and learn with us!\n\n- Star this repo :)\n- Check [Contributor's guideline](https://github.com/bluewave-labs/guidefox/blob/master/CONTRIBUTING.md)\n- Have a look at our Figma designs [here](https://www.figma.com/design/MLPbP1HM2L9ON6f88pHTee/Onboarding?node-id=0-1\u0026t=iwgz015l5QWbWRqU-1). We encourage you to copy to your own Figma page, then work on it as it is read-only.\n- Open an issue if you believe you've encountered a bug\n- Make a pull request to add new features/make quality-of-life improvements/fix bugs.\n- Make sure your send your PRs to **develop** branch.\n\n\u003ca href=\"https://github.com/bluewave-labs/guidefox/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=bluewave-labs/guidefox\" /\u003e\n\u003c/a\u003e\n\n\nAlso check other developer and contributor-friendly projects of BlueWave:\n\n- [Checkmate](https://github.com/bluewave-labs/checkmate), a server and infrastructure monitoring tool\n- [DataHall](https://github.com/bluewave-labs/datahall), an secure file sharing application, aka dataroom.\n- [Headcount](https://github.com/bluewave-labs/headcount), a complete Human Resource Management platform.\n- [VerifyWise](https://github.com/bluewave-labs/verifywise), the first open source AI governance platform.\n\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluewave-labs%2Fguidefox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbluewave-labs%2Fguidefox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluewave-labs%2Fguidefox/lists"}