Skip to content

Commit 8f7cfb5

Browse files
committed
init
0 parents  commit 8f7cfb5

199 files changed

Lines changed: 19970 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Editor configuration, see https://editorconfig.org
2+
root = true
3+
4+
[*]
5+
charset = utf-8
6+
indent_style = space
7+
indent_size = 2
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true
10+
11+
[*.ts]
12+
quote_type = single
13+
ij_typescript_use_double_quotes = false
14+
15+
[*.md]
16+
max_line_length = off
17+
trim_trailing_whitespace = false

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @dgaribiani

.github/workflows/static.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Simple workflow for deploying static content to GitHub Pages
2+
name: Deploy static content to Pages
3+
4+
on:
5+
# Runs on pushes targeting the default branch
6+
push:
7+
branches: ["main"]
8+
9+
# Allows you to run this workflow manually from the Actions tab
10+
workflow_dispatch:
11+
12+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
13+
permissions:
14+
contents: read
15+
pages: write
16+
id-token: write
17+
18+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
19+
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
20+
concurrency:
21+
group: "pages"
22+
cancel-in-progress: false
23+
24+
jobs:
25+
# Single deploy job since we're just deploying
26+
deploy:
27+
environment:
28+
name: github-pages
29+
url: ${{ steps.deployment.outputs.page_url }}
30+
runs-on: ubuntu-latest
31+
steps:
32+
- name: Checkout
33+
uses: actions/checkout@v4
34+
- name: Setup Node
35+
uses: actions/setup-node@v4
36+
with:
37+
node-version: 20
38+
cache: npm
39+
- name: Install dependencies
40+
run: npm ci
41+
- name: Build
42+
run: npm run build -- --configuration production --base-href /devtools/
43+
- name: Setup Pages
44+
uses: actions/configure-pages@v5
45+
- name: Upload artifact
46+
uses: actions/upload-pages-artifact@v3
47+
with:
48+
path: ./dist/devtools
49+
- name: Deploy to GitHub Pages
50+
id: deployment
51+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
2+
3+
# Compiled output
4+
/dist
5+
/tmp
6+
/out-tsc
7+
/bazel-out
8+
9+
# Node
10+
/node_modules
11+
npm-debug.log
12+
yarn-error.log
13+
14+
# IDEs and editors
15+
.idea/
16+
.project
17+
.classpath
18+
.c9/
19+
*.launch
20+
.settings/
21+
*.sublime-workspace
22+
23+
# Visual Studio Code
24+
.vscode/*
25+
!.vscode/settings.json
26+
!.vscode/tasks.json
27+
!.vscode/launch.json
28+
!.vscode/extensions.json
29+
!.vscode/mcp.json
30+
.history/*
31+
32+
# Miscellaneous
33+
/.angular/cache
34+
.sass-cache/
35+
/connect.lock
36+
/coverage
37+
/libpeerconnection.log
38+
testem.log
39+
/typings
40+
__screenshots__/
41+
42+
# System files
43+
.DS_Store
44+
Thumbs.db

.vscode/extensions.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846
3+
"recommendations": ["angular.ng-template"]
4+
}

.vscode/launch.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
3+
"version": "0.2.0",
4+
"configurations": [
5+
{
6+
"name": "ng serve",
7+
"type": "chrome",
8+
"request": "launch",
9+
"preLaunchTask": "npm: start",
10+
"url": "http://localhost:4200/"
11+
},
12+
{
13+
"name": "ng test",
14+
"type": "chrome",
15+
"request": "launch",
16+
"preLaunchTask": "npm: test",
17+
"url": "http://localhost:9876/debug.html"
18+
}
19+
]
20+
}

.vscode/mcp.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
// For more information, visit: https://angular.dev/ai/mcp
3+
"servers": {
4+
"angular-cli": {
5+
"command": "npx",
6+
"args": ["-y", "@angular/cli", "mcp"]
7+
}
8+
}
9+
}

.vscode/tasks.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
// For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558
3+
"version": "2.0.0",
4+
"tasks": [
5+
{
6+
"type": "npm",
7+
"script": "start",
8+
"isBackground": true,
9+
"problemMatcher": {
10+
"owner": "typescript",
11+
"pattern": "$tsc",
12+
"background": {
13+
"activeOnStart": true,
14+
"beginsPattern": {
15+
"regexp": "Changes detected"
16+
},
17+
"endsPattern": {
18+
"regexp": "bundle generation (complete|failed)"
19+
}
20+
}
21+
}
22+
},
23+
{
24+
"type": "npm",
25+
"script": "test",
26+
"isBackground": true,
27+
"problemMatcher": {
28+
"owner": "typescript",
29+
"pattern": "$tsc",
30+
"background": {
31+
"activeOnStart": true,
32+
"beginsPattern": {
33+
"regexp": "Changes detected"
34+
},
35+
"endsPattern": {
36+
"regexp": "bundle generation (complete|failed)"
37+
}
38+
}
39+
}
40+
}
41+
]
42+
}

README.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# Dev Toolbox
2+
3+
A privacy-first, offline-friendly toolbox of developer utilities that runs entirely in the browser. No backend required, and no tracking by default.
4+
5+
## Highlights
6+
- Built with Angular + TypeScript and shipped as static assets.
7+
- TailwindCSS + Angular Material with a glassmorphism UI.
8+
- CodeMirror 6 for rich editor inputs.
9+
- Web Workers for heavy JSON/Text operations.
10+
- Offline-ready PWA in production builds.
11+
- Modular, lazy-loaded routes per tool category.
12+
13+
## Supported Tools
14+
JSON Core:
15+
- JSON Formatter / Validator
16+
- JSON Minifier
17+
- JSON Canonicalizer
18+
- JSON Diff
19+
- JSON <-> YAML
20+
- JSON Schema Validator
21+
- JSONPath Evaluator
22+
- JSON Patch (RFC 6902)
23+
- JSON Merge Patch
24+
- JSON -> Types
25+
- JSON5 / JSONC -> JSON
26+
27+
Text Tools:
28+
- Text Diff
29+
- Regex Tester
30+
- Text Editor + Counter
31+
- Whitespace Normalizer
32+
- Markdown Preview
33+
- Unicode Inspector
34+
35+
Crypto & Encoding:
36+
- Base64 Encode/Decode
37+
- URL Encode/Decode
38+
- JWT Decoder
39+
- Hash Generator
40+
- UUID Generator
41+
- UUIDv7 / ULID
42+
- HMAC Generator
43+
- Password Generator
44+
45+
Data Utilities:
46+
- Timestamp Converter
47+
- CSV <-> JSON
48+
- Cron Next Run
49+
- Timezone Converter
50+
- CSV Profiler
51+
- OpenAPI Snippet Viewer
52+
53+
SQL Tools:
54+
- SQL Formatter / Minifier
55+
- SQL IN Clause Builder
56+
- SQL Identifier Escaper
57+
- Execution Plan Analyzer
58+
59+
## Quick Start
60+
```bash
61+
npm install
62+
npm start
63+
```
64+
65+
Then open `http://localhost:4200/`.
66+
67+
## Scripts
68+
- `npm start`: Run the dev server (development configuration).
69+
- `npm run build`: Production build.
70+
- `npm run watch`: Build in watch mode for development.
71+
- `npm test`: Run unit tests.
72+
73+
## Build Output
74+
Production builds emit static assets to `dist/devtools`.
75+
76+
## Deploying (S3 + CloudFront)
77+
1. Build the app and upload the contents of `dist/devtools` to your S3 bucket.
78+
2. Enable S3 static website hosting.
79+
3. CloudFront:
80+
- Set default root object to `index.html`.
81+
- Add custom error responses for 403/404 to serve `/index.html` with HTTP 200 (SPA routing).
82+
4. Cache headers (recommended):
83+
- `index.html`: `Cache-Control: no-cache`
84+
- `/*.js`, `/*.css`, assets: `Cache-Control: public, max-age=31536000, immutable`
85+
86+
## Ads / Monetization
87+
Ad placeholder lives here:
88+
- `src/app/shared/components/ad-slot/ad-slot.component.html`
89+
90+
Paste your Carbon Ads / EthicalAds / AdSense snippet in the commented section within that file.
91+
92+
## Privacy & Security Notes
93+
- All processing happens locally in the browser.
94+
- No user input is sent to any server.
95+
- Analytics are off by default and optional.
96+
- JWT decoder is **decode-only** and does not verify signatures.
97+
- "Remember my inputs" is off by default; enabling it stores inputs locally on this device.
98+
99+
## Contributor Guidelines
100+
- Keep changes focused and incremental; avoid drive-by refactors.
101+
- Follow existing Angular + TypeScript patterns and keep lint/build clean.
102+
- Prefer pure, testable functions for data transforms and heavy parsing.
103+
- Use Web Workers for CPU-heavy operations to keep the UI responsive.
104+
- Keep UI components accessible (labels, contrast, keyboard focus, ARIA where needed).
105+
- Respect privacy-by-default: no new tracking, network calls, or telemetry without explicit discussion.
106+
- Update docs when you add or change tools, routes, or build behavior.
107+
108+
Before opening a PR:
109+
- Run `npm test` and `npm run build`.
110+
- Verify the affected tool in the browser (inputs, outputs, and error states).

angular.json

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
{
2+
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3+
"version": 1,
4+
"cli": {
5+
"packageManager": "npm",
6+
"analytics": "07d6cd24-c3d8-4a46-815f-f85810bb6e87"
7+
},
8+
"newProjectRoot": "projects",
9+
"projects": {
10+
"dev-toolbox": {
11+
"projectType": "application",
12+
"schematics": {},
13+
"root": "",
14+
"sourceRoot": "src",
15+
"prefix": "app",
16+
"architect": {
17+
"build": {
18+
"builder": "@angular/build:application",
19+
"options": {
20+
"outputPath": {
21+
"base": "dist/devtools",
22+
"browser": "."
23+
},
24+
"browser": "src/main.ts",
25+
"tsConfig": "tsconfig.app.json",
26+
"webWorkerTsConfig": "tsconfig.worker.json",
27+
"assets": [
28+
{
29+
"glob": "**/*",
30+
"input": "public"
31+
}
32+
],
33+
"styles": [
34+
"src/material-theme.scss",
35+
"src/styles.css"
36+
],
37+
"allowedCommonJsDependencies": [
38+
"ajv",
39+
"papaparse",
40+
"json5",
41+
"nearley"
42+
]
43+
},
44+
"configurations": {
45+
"production": {
46+
"budgets": [
47+
{
48+
"type": "initial",
49+
"maximumWarning": "900kB",
50+
"maximumError": "1.5MB"
51+
},
52+
{
53+
"type": "anyComponentStyle",
54+
"maximumWarning": "4kB",
55+
"maximumError": "8kB"
56+
}
57+
],
58+
"outputHashing": "all",
59+
"serviceWorker": "ngsw-config.json"
60+
},
61+
"development": {
62+
"optimization": false,
63+
"extractLicenses": false,
64+
"sourceMap": true
65+
}
66+
},
67+
"defaultConfiguration": "production"
68+
},
69+
"serve": {
70+
"builder": "@angular/build:dev-server",
71+
"configurations": {
72+
"production": {
73+
"buildTarget": "dev-toolbox:build:production"
74+
},
75+
"development": {
76+
"buildTarget": "dev-toolbox:build:development"
77+
}
78+
},
79+
"defaultConfiguration": "development"
80+
},
81+
"test": {
82+
"builder": "@angular/build:unit-test"
83+
}
84+
}
85+
}
86+
}
87+
}

0 commit comments

Comments
 (0)