Security Automation Script Project
Part of the Cybersecurity Roadmap
In short
One polished tool that solves a real annoyance says more about you than ten half finished scripts. This project shows you can build, test and ship something others can use.
A polished, well-documented automation tool solving a real security task — showcasing Phase 13's scripting skills as a standalone, shareable project.

Think of it like this
The automatic water pump
In many buildings someone used to climb up and check the tank, then run down to switch on the pump. An automatic controller now senses a low tank and starts the pump itself. Your project should be that controller for one boring security chore.
Watch it happen
Build plan
1/6Choose one real chore, like summarising failed logins or checking certificate expiry for your domains.
The big ideas
What you need to know
Solve one thing well
A narrow tool that works reliably beats a huge tool that half works.
Dry run by default
If the tool changes anything, make report only the default and require a flag to apply changes.
Logs and exit codes
Clear logs and meaningful exit codes let others plug your tool into cron or CI.
Safe with secrets
No keys in the repo, ever. Show in the README how to pass them safely.
See it in code
Walk through the code
1import argparse, logging, os, sys2 3def main() -> int:4 ap = argparse.ArgumentParser(description="Warn about certificates expiring soon")5 ap.add_argument("--days", type=int, default=14)6 ap.add_argument("--apply", action="store_true", help="actually open tickets")7 args = ap.parse_args()8 logging.basicConfig(level=os.environ.get("LOG_LEVEL", "INFO"))9 expiring = check_domains(load_domains("domains.txt"), args.days)10 for d in expiring:11 logging.warning("expires soon: %s", d)12 if args.apply and expiring:13 open_tickets(expiring)14 return 1 if expiring else 015 16if __name__ == "__main__": sys.exit(main())1/4Options with sensible defaults; --apply must be passed explicitly to change anything.
A project skeleton: a main function, flags with safe defaults, configurable logging and an exit code. The helper functions are yours to build and test.
Save yourself the pain
Common mistakes
Oops
A repo with only main.py and no README.
Do this instead
Add a README with purpose, install, usage and example output. It is the first thing reviewers read.
Oops
Testing only with perfect sample data.
Do this instead
Feed it empty files, broken lines and huge inputs. Real logs are messy.
Your mission
First milestone: a working MVP
Quick check
Why should an automation tool default to report only mode?
Go deeper
- 1Build a tool that solves a genuine problem (e.g. automated log parsing, IOC lookup).
- 2Write clear documentation: what it does, how to use it, and example output.
- 3Publish it on GitHub with a README explaining the problem it solves.
More projects at this stop
Stuck on this topic? Ask an Insider
Get 1:1 guidance from people who've walked this exact path — on the InsideEdge app.