| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Sharp sharp! South African phrases, slang, and culture served fresh via a simple API. Perfect for Dutchies, expats, or anyone who wants to shout voetsek in style.
SaaS is the little API that makes South African culture accessible, fun, and sometimes downright cheeky. Whether you're testing your API skills or educating Dutch colleagues, we've got your back.
Ever wondered what your Dutch friends would think if you said "Just now" or shouted "Laduma!"? SaaS brings the essence of South Africa to your fingertips:
| Phrase | Category | Actual Meaning | Afrikaans Influence | Dutch Explanation |
|---|---|---|---|---|
| Ag, man! | expression | Oh man! Expresses pity, resignation, or irritation | Yes | This is not 'ach man' in Dutch; it's more like 'oh jee, man'. |
| Babbelas | slang | A hangover; feeling rough after drinking | Yes | Not 'babbelaz'. It means you are hungover, not talking too much. |
| Voetsek | slang | Go away! Shoo! | Yes | Not polite! Used to tell someone (or something) to get lost. |
| Lekker | expression | Good, nice, fun, or tasty — always positive | Yes | Not just 'lekker' in Dutch; can describe mood, food, or event. |
| Just now | south-african | Eventually. Not today energy. | Yes | This is not 'zo meteen'. Do not wait. |
And many more! Check the /phrase endpoint for the full collection.
The API is deployed and ready to use! No need to run it locally:
🌐 Live API: https://saas.volkwyn.nl
📖 Interactive Documentation: https://saas.volkwyn.nl/scalar/
Try it out directly in your browser with the Scalar UI for testing requests and exploring all available endpoints!
git clone https://github.com/Dev1994/SaaS.git
cd SaaS/SaffaApi
dotnet runAPI will be live at:
HTTP: http://localhost:5286 HTTPS: https://localhost:7023
git clone https://github.com/Dev1994/SaaS.git
cd SaaS
docker-compose up -dAPI will be available at: http://localhost:8083
git clone https://github.com/Dev1994/SaaS.git
cd SaaS/AppHost
dotnet runThis starts the complete monitoring stack:
| Endpoint | Description |
|---|---|
| / | Welcome message |
| /phrase | Get a random South African phrase |
| /phrase/dutch | Get a random phrase with Dutch explanation |
| /phrase/{term} | Get phrase by exact term |
| /phrase/category/{category} | Filter phrases by category (slang, cultural, expression, south-african) |
| /health | Health check endpoint for monitoring |
| /openapi | OpenAPI / Swagger specification |
| /scalar | Beautiful Scalar UI with interactive documentation |
To keep the API running smoothly for everyone, we've implemented intelligent chained rate limits:
If you hit either limit, you'll get this friendly South African response:
HTTP/1.1 429 Too Many Requests
Eish! You're going too fast there, boet! Slow down a bit and try again later. 🐢Technical Note: The API uses a combination of TokenBucketRateLimiter for minute-based smoothing and FixedWindowRateLimiter for hourly enforcement.
SaaS includes comprehensive distributed tracing capabilities using Jaeger and OpenTelemetry.
The telemetry data flows through the following architecture:
graph TD
A[HTTP Request] --> B[ASP.NET Core App]
B --> C[OpenTelemetry]
C --> D[Jaeger<br/>Traces]
C --> E[OTLP<br/>Metrics]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#fff3e0
style D fill:#e8f5e8
style E fill:#fff8e1
Start the complete observability stack
cd SaaS/AppHost
dotnet runAccess Jaeger UI
Open http://localhost:16686 in your browser to explore traces.
Access other services
The API automatically traces:
export JAEGER_ENDPOINT="http://localhost:14268/api/traces"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317"| Setting | Default | Description |
|---|---|---|
| OpenTelemetry:JaegerEndpoint | http://localhost:14268/api/traces | Jaeger HTTP endpoint for traces |
| OpenTelemetry:OtlpEndpoint | http://localhost:4317 | OTLP gRPC endpoint for metrics |
| OpenTelemetry:ServiceName | SaffaApi | Service name in traces |
| OpenTelemetry:ServiceVersion | 1.0.0 | Service version in traces |
In the Jaeger UI you can:
Enable OpenTelemetry debug logging:
{
"Logging": {
"LogLevel": {
"OpenTelemetry": "Debug"
}
}
}Stop the AppHost process (Ctrl+C) to stop all services including Jaeger.
SaaS includes comprehensive observability features beyond tracing:
When running with .NET Aspire, you get:
curl https://saas.volkwyn.nl/phrasecurl https://saas.volkwyn.nl/phrase/dutchcurl https://saas.volkwyn.nl/phrase/braaicurl https://saas.volkwyn.nl/phrase/category/slangcurl https://saas.volkwyn.nl/healthOr try it locally:
curl http://localhost:5286/phraseSample Response:
{
"text": "Braai",
"category": "cultural",
"actualMeaning": "Barbecue / social gathering; more than just food.",
"afrikaansInfluence": true,
"explainLikeImDutch": "Not a 'barbecue' only; it's an event with friends, drinks, and meat.",
"misunderstandingProbability": 0.95,
"confidence": "High"
}SaaS/ ├── SaffaApi/ # Main API project │ ├── Program.cs # Application entry point │ ├── Models/ │ │ └── Phrase.cs # Phrase model definition │ ├── Services/ │ │ ├── IPhraseService.cs # Service interface │ │ └── PhraseService.cs # Service implementation │ ├── Extensions/ # Extension methods for clean configuration │ │ ├── ApiExtensions.cs # API configuration │ │ ├── CorsExtensions.cs # CORS setup │ │ ├── OpenTelemetryExtensions.cs # Observability with Jaeger │ │ ├── RateLimitingExtensions.cs # Rate limiting │ │ └── SecurityExtensions.cs # Security headers │ ├── data/ │ │ └── phrases.json # Phrase data store │ └── Dockerfile # Container configuration ├── AppHost/ # .NET Aspire orchestration │ ├── AppHost.cs # Aspire host configuration with Jaeger │ ├── prometheus/ # Prometheus configuration │ └── grafana/ # Grafana dashboards └── docker-compose.yml # Container deployment
Main Components:
The API includes production-ready Docker configuration:
We love contributions!
Pull requests welcome — fork, fix, submit, sharp sharp!
MIT © Have fun with it! Just don't do anything too shady, hey?
| Back | FazBrowse Home | New Git URL |