Skip to content
fi3tePublic

About

Go service that periodically scrapes offers from the ALDI Nord website, filters them by relevance, exposes them via a REST API and sends push notifications through ntfy.sh.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

nordealdi

nordealdi is a small Go application that keeps an eye on the weekly deals at ALDI Nord for you. The name is a portmanteau of ALDI Nord and deal: Nord + deal + ALDI → nordealdi.

What it does

  • Periodically fetches the offers page of ALDI Nord.
  • Persists every fetch as a timestamped JSON snapshot, so offer history is kept and changes can be tracked.
  • Filters the offers against your configured relevance keywords.
  • Sends a push notification to your device via ntfy.sh when matching offers are found.
  • Exposes the latest snapshot through a small REST API:
    • GET /offers — the latest offers, optionally filtered with ?search=...
    • GET /health — a health check

Configuration

Configuration is loaded from a config.json file in the working directory (or provided at the configured path). If the file is missing, sensible defaults are used.

Available attributes

Attribute Type Default Description
relevant_offers []string [] Case-insensitive keywords that make an offer relevant. When non-empty, only offers whose name or brand matches at least one keyword trigger a notification. Empty means all offers are relevant.
ntfy_topic string "nordealdi" The ntfy.sh topic that push notifications are sent to.
enable_notifications bool true Whether push notifications are enabled at all. When false, the application still fetches and stores offers, but sends no notifications.
cron_expression string "0 * * * *" The 5-field CRON expression that controls how often offers are fetched. "0 * * * *" means "every hour at minute 0".
scheduler_max_retries int 3 Maximum number of times a failed fetch-and-notify task is retried.
scheduler_max_backoff_seconds int 60 Upper bound (in seconds) for the exponential backoff between retries.
scheduler_initial_backoff_seconds int 1 Initial backoff (in seconds) before the first retry.
store_dir string "./data" Directory where the offer snapshot files are persisted.
store_retention int 10 Maximum number of snapshot files to keep. Older files are deleted once the limit is exceeded. A value <= 0 keeps all snapshots.

Example

{
  "relevant_offers": ["Schokolade"],
  "ntfy_topic": "a2d1b5c8-022a-43fe-91b5-c8022a33fea5",
  "enable_notifications": true,
  "cron_expression": "0 * * * *",
  "scheduler_max_retries": 3,
  "scheduler_max_backoff_seconds": 60,
  "scheduler_initial_backoff_seconds": 10,
  "store_dir": "./data",
  "store_retention": 10
}

Usage

  1. Update the config.json file to your needs (see Configuration above).
  2. Update the docker setup if necessary.
  3. Start the application using docker compose (recommended)
    docker compose up -d
    
    or run it without docker.
    go run ./cmd
    

Build & Test

go build ./...   # compile everything
go test ./...    # run all unit tests
go vet ./...     # static analysis

See AGENTS.md for the full developer guide.

Acknowledgements

This project was developed with the support of artificial intelligence (AI). The large language model DeepSeek V4-Flash was used to assist with writing and reviewing parts of the codebase.

Disclaimer

This is an independent, unofficial project and is not affiliated with or endorsed by ALDI Nord. It retrieves publicly available offer data from the ALDI Nord website for informational purposes only. All trademarks, product names, and other content remain the property of their respective owners.

About

Go service that periodically scrapes offers from the ALDI Nord website, filters them by relevance, exposes them via a REST API and sends push notifications through ntfy.sh.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages