InterSacks Navy
#081423InterSacks Resource Hub
Brand foundations, practical browser tools, project checklists, and small Python automations for developers, collaborators, and growing businesses.
No resources match that search.
Brand foundations
Reference the current InterSacks palette and typography when preparing approved brand work.
#081423#0E1E31#C8A15A#F8F8F6#14202DManrope
Clean, readable, and practical for navigation, body copy, buttons, and interfaces.
Open official font sourcePlayfair Display
Used selectively for expressive emphasis and premium editorial contrast.
Open official font source:root {
--navy: #081423;
--navy-2: #0e1e31;
--gold: #c8a15a;
--cream: #f8f8f6;
--ink: #14202d;
--font: 'Manrope', Arial, sans-serif;
--serif: 'Playfair Display', Georgia, serif;
}
Browser tools
Useful InterSacks tools that work directly in the browser and require no installation.
Create a polished invoice, calculate totals, and export a client-ready document.
Open toolPrepare a clear project quote with structured items, pricing, and client details.
Open toolCapture work completed, customer details, materials, and sign-off in one place.
Open toolTurn selected items into a structured WhatsApp order without needing a backend.
Open toolPython automations
Short, inspectable starter scripts with clear inputs, safe defaults, and downloadable source files.
Create a clean HTML, CSS, JavaScript, images, and assets folder structure without overwriting an existing project.
from argparse import ArgumentParser
from pathlib import Path
import re
def safe_name(value: str) -> str:
name = re.sub(r"[^a-z0-9]+", "-", value.lower()).strip("-")
if not name:
raise ValueError("Project name must contain a letter or number.")
return name
def build_project(project_name: str, destination: Path) -> Path:
root = destination / safe_name(project_name)
if root.exists() and any(root.iterdir()):
raise FileExistsError(f"Refusing to overwrite non-empty folder: {root}")
for folder in ("css", "js", "images", "assets"):
(root / folder).mkdir(parents=True, exist_ok=True)
starter_files = {
"index.html": (
"<!doctype html>\n"
"<html lang=\"en\">\n"
"<head>\n"
" <meta charset=\"utf-8\">\n"
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n"
" <title>New project</title>\n"
" <link rel=\"stylesheet\" href=\"css/styles.css\">\n"
" <script src=\"js/script.js\" defer></script>\n"
"</head>\n"
"<body>\n"
" <main><h1>Ready to build</h1></main>\n"
"</body>\n"
"</html>\n"
),
"css/styles.css": "* { box-sizing: border-box; }\nbody { margin: 0; font-family: sans-serif; }\n",
"js/script.js": "console.log('Project ready');\n",
}
for relative_path, content in starter_files.items():
path = root / relative_path
if not path.exists():
path.write_text(content, encoding="utf-8")
return root
if __name__ == "__main__":
parser = ArgumentParser(description="Create a safe static-site starter.")
parser.add_argument("name", help="Project name")
parser.add_argument("--destination", type=Path, default=Path.cwd())
args = parser.parse_args()
print(f"Created: {build_project(args.name, args.destination).resolve()}")Scan a static website for HTML pages and create a valid sitemap.xml for search engines.
from argparse import ArgumentParser
from datetime import date
from pathlib import Path
from urllib.parse import quote
from xml.sax.saxutils import escape
def page_url(path: Path, root: Path, base_url: str) -> str:
relative = path.relative_to(root).as_posix()
route = relative[:-10] if relative.endswith("index.html") else relative
return f"{base_url.rstrip('/')}/{quote(route, safe='/')}"
def build_sitemap(root: Path, base_url: str) -> str:
pages = sorted(p for p in root.rglob("*.html") if "404" not in p.stem)
today = date.today().isoformat()
entries = [
f" <url><loc>{escape(page_url(page, root, base_url))}</loc><lastmod>{today}</lastmod></url>"
for page in pages
]
return "\n".join([
'<?xml version="1.0" encoding="UTF-8"?>',
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
*entries,
"</urlset>",
"",
])
if __name__ == "__main__":
parser = ArgumentParser(description="Generate sitemap.xml for a static site.")
parser.add_argument("base_url", help="Example: https://example.com")
parser.add_argument("--root", type=Path, default=Path.cwd())
args = parser.parse_args()
output = args.root / "sitemap.xml"
output.write_text(build_sitemap(args.root, args.base_url), encoding="utf-8")
print(f"Created {output.resolve()}")Convert common website images into a separate WebP folder while keeping every original file untouched.
pip install Pillow
from argparse import ArgumentParser
from pathlib import Path
from PIL import Image
SUPPORTED = {".jpg", ".jpeg", ".png"}
def convert_images(source: Path, quality: int, overwrite: bool) -> tuple[int, int]:
output = source / "webp"
output.mkdir(exist_ok=True)
converted = skipped = 0
for path in sorted(source.iterdir()):
if not path.is_file() or path.suffix.lower() not in SUPPORTED:
continue
target = output / f"{path.stem}.webp"
if target.exists() and not overwrite:
skipped += 1
continue
with Image.open(path) as image:
if image.mode not in {"RGB", "RGBA"}:
image = image.convert("RGBA" if "transparency" in image.info else "RGB")
image.save(target, "WEBP", quality=quality, method=6)
converted += 1
return converted, skipped
if __name__ == "__main__":
parser = ArgumentParser(description="Convert JPG and PNG images to WebP.")
parser.add_argument("folder", type=Path)
parser.add_argument("--quality", type=int, choices=range(1, 101), default=82)
parser.add_argument("--overwrite", action="store_true")
args = parser.parse_args()
done, skipped = convert_images(args.folder, args.quality, args.overwrite)
print(f"Converted: {done} | Skipped: {skipped}")Project starters
Simple planning resources for clients and collaborators before design or development begins.
Define the business goal, audience, pages, required features, content ownership, and success measure.
Download templateCollect the copy, images, contact details, policies, and account access a website project needs.
Download checklistBring the brief. InterSacks can help turn it into a clear website, practical automation, or custom business tool.
Start a projectBuild something useful
Tell us what you are building and where the process is slowing you down.
Start a project ↗