Project-specific documentation and patterns for the TLS Watch monitoring tool.
Install
mkdir -p .claude/skills/skills-xdaijobu && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/9735" && unzip -o skill.zip -d .claude/skills/skills-xdaijobu && rm skill.zipInstalls to .claude/skills/skills-xdaijobu
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
How to work with TLS Watch - a TLS certificate monitoring applicationKey capabilities
- →Monitor TLS certificate expiry
- →Manage notification channels
- →Dashboard management
- →Backend service management
How it works
It uses a Go backend to check certificates and a Next.js frontend to display status and manage notifications.
Inputs & outputs
When to use skills
- →Creating new modal components
- →Managing Go backend services
- →Implementing UI using shadcn/ui
- →Handling certificate expiry logic
About this skill
TLS Watch - Project Skills
Project Overview
TLS Watch is a self-hosted TLS/SSL certificate monitoring app. It checks certificate expiry dates, sends notifications when they're about to expire, and provides a dashboard to manage everything.
Stack:
- Backend: Go (Gin, GORM, SQLite) - located in
backend/ - Frontend: Next.js 14 + TypeScript + Tailwind CSS - located in
frontend/ - Deployment: Docker (single container)
Directory Structure
tls-watch/
├── backend/
│ ├── main.go # Entry point, routes
│ ├── handlers/ # HTTP handlers
│ ├── models/ # GORM models
│ ├── services/ # Business logic
│ └── pkg/ # Utilities
├── frontend/
│ ├── app/ # Next.js pages
│ ├── components/ # React components
│ │ └── ui/ # shadcn/ui
│ └── lib/ # API client, utils
├── Dockerfile
└── docker-compose.yml
Key Patterns
Modal Components
interface Props {
project: Project;
onClose: () => void;
}
export default function SomeModal({ project, onClose }: Props) {
return (
<Dialog open={true} onOpenChange={(open) => !open && onClose()}>
<DialogContent>
{/* Content */}
</DialogContent>
</Dialog>
);
}
Confirmation Dialogs - Use ConfirmModal, NOT native confirm()
import ConfirmModal from "@/components/ConfirmModal"
const [showConfirm, setShowConfirm] = useState(false);
<ConfirmModal
isOpen={showConfirm}
title="Delete Item"
message="This cannot be undone."
onConfirm={handleDelete}
onCancel={() => setShowConfirm(false)}
isDestructive={true}
confirmText="Delete"
cancelText="Cancel"
/>
API Pattern
import api from '@/lib/api';
const res = await api.get(`/endpoint`);
await api.post(`/endpoint`, { data });
await api.delete(`/endpoint`);
Backend Handler Pattern
func HandlerName(c *gin.Context) {
userID := c.MustGet("userID").(uint)
paramID := c.Param("id")
var model models.Model
if err := models.DB.Where("id = ? AND user_id = ?", paramID, userID).First(&model).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Not found"})
return
}
c.JSON(http.StatusOK, gin.H{"data": result})
}
Development Commands
# Docker build & run
docker-compose up --build -d
docker-compose logs -f
# Frontend dev
cd frontend && npm install && npm run dev
# Backend dev
cd backend && go run main.go
Database Models
User- AuthenticationProject- Certificate monitoring projectsDomain- Domains to monitorNotification- Notification channels (discord, slack, telegram, irc, generic)NotificationLog- Delivery historyIRCAccount- IRC bot accountsLoginLog- User login history
Important Rules
- Never use native
confirm(),alert(), orprompt()- use ConfirmModal instead - Use
Preload()in GORM queries for nested data - Backend returns paginated responses:
{ data: [...], total, page, total_pages } - Use
stripIRCCodes()helper for IRC messages - Update README.md when adding or changing features - keep docs in sync with code
- Commit and push after completing features - don't leave uncommitted work
- Check for duplicate data before inserting (domains, notifications, etc.)
Git Workflow
Always commit with conventional commit messages:
feat: add notification frequency setting
fix: properly detect IRC connection failure
docs: update README with new features
refactor: simplify SSL check logic
After completing a feature or fix:
git add -Agit commit -m "type: description"git push
Writing Code & Docs
DRY (Don't Repeat Yourself) - Extract repeated logic into helper functions. If you write similar code twice, refactor it.
Keep code and documentation simple and readable. No emojis in README or docs - looks AI-generated. Write like a developer: clear, practical, straight to the point.
Bad:
## 🚀 Amazing Features! ✨
We're SO excited to introduce this INCREDIBLE feature! 🎉
Good:
## Features
- SSL certificate monitoring with expiry alerts
- Multi-channel notifications (Discord, Slack, Telegram, IRC)
Keep comments minimal. If the code is clear, it doesn't need a comment.
Notification System
Notifications have status tracking:
last_status: "success" | "failed" | "pending"last_error: Error message if failed
Frequency per project:
notify_frequency: "daily" | "weekly" | "monthly"last_notified_at: Timestamp of last notification
Always update notification status after sending.
When not to use it
- →For non-TLS monitoring tasks
- →When Docker is not available
Prerequisites
Limitations
- →Requires Docker for deployment
- →Backend returns paginated responses
How it compares
It provides a self-hosted, structured project architecture for TLS monitoring.
Compared to similar skills
skills side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| skills (this skill) | 0 | 6mo | No flags | Intermediate |
| fullstack-developer | 0 | 5mo | Review | Advanced |
| dapp | 0 | 1mo | Review | Intermediate |
| databuddy | 1 | 3mo | Caution | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
fullstack-developer
daithang59
|
dapp
salazarsebas
Stellar dApp / frontend development. Covers the JavaScript stellar-sdk (browser + Node.js), Freighter wallet, Stellar Wallets Kit (multi-wallet), Wallet Standard, smart accounts with passkeys, transaction building / signing / submission, Soroban contract invocation from the client, simulation, and e
databuddy
databuddy-analytics
Integrate Databuddy analytics into applications using the SDK or REST API. Use when implementing analytics tracking, feature flags, custom events, Web Vitals, error tracking, LLM observability, or querying analytics data programmatically.
fullstack-guardian
Jeffallan
Use when implementing features across frontend and backend, building APIs with UI, or creating end-to-end data flows. Invoke for feature implementation, API development, UI building, cross-stack work.
javascript-typescript-typescript-scaffold
sickn33
You are a TypeScript project architecture expert specializing in scaffolding production-ready Node.js and frontend applications. Generate complete project structures with modern tooling (pnpm, Vite, N
podcast-generation
microsoft
Generate AI-powered podcast-style audio narratives using Azure OpenAI's GPT Realtime Mini model via WebSocket. Use when building text-to-speech features, audio narrative generation, podcast creation from content, or integrating with Azure OpenAI Realtime API for real audio output. Covers full-stack implementation from React frontend to Python FastAPI backend with WebSocket streaming.