mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat: pipeline templates, analytics opt-out, 83 conversion presets, positioning + e2e modernization
Lands five integrated branches: pipeline templates (#355), analytics opt-out (#354), 83 conversion presets bringing the catalog to 240 tools (#356), self-hosted positioning (#353), and e2e modernization (#351). Integration fixes: aligned stale web analytics tests with the opt-out/allow-list model, closed 3 CodeQL incomplete-sanitization alerts in the i18n generator, resolved settings/index/docs/format-matrix conflicts, and corrected tool counts to 240.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { expandConversionPresets } from "./conversion-presets.js";
|
||||
import { AUDIO_INPUTS, IMAGE_INPUTS, SUBTITLE_INPUTS, VIDEO_INPUTS } from "./modality.js";
|
||||
import { toolSection } from "./section.js";
|
||||
import type { CategoryInfo, SocialMediaPreset, Tool } from "./types.js";
|
||||
@@ -34,7 +35,7 @@ export const CATEGORIES: CategoryInfo[] = [
|
||||
{ id: "archives", name: "Archives", icon: "FolderArchive", color: "#6366F1" },
|
||||
];
|
||||
|
||||
export const TOOLS: Tool[] = [
|
||||
const BASE_TOOLS: Tool[] = [
|
||||
// Essentials
|
||||
{
|
||||
id: "resize",
|
||||
@@ -78,6 +79,14 @@ export const TOOLS: Tool[] = [
|
||||
route: "/convert",
|
||||
modality: "image",
|
||||
acceptedInputs: IMAGE_INPUTS,
|
||||
keywords: [
|
||||
"image converter",
|
||||
"jpg to png",
|
||||
"png to jpg",
|
||||
"heic to jpg",
|
||||
"webp to png",
|
||||
"convert image format",
|
||||
],
|
||||
executionHint: "fast",
|
||||
},
|
||||
{
|
||||
@@ -241,7 +250,7 @@ export const TOOLS: Tool[] = [
|
||||
},
|
||||
{
|
||||
id: "ocr",
|
||||
name: "OCR / Text Extraction",
|
||||
name: "Extract Text from Image (OCR)",
|
||||
description: "Extract text from images",
|
||||
category: "doc-convert",
|
||||
icon: "ScanText",
|
||||
@@ -809,6 +818,7 @@ export const TOOLS: Tool[] = [
|
||||
route: "/convert-video",
|
||||
modality: "video",
|
||||
acceptedInputs: VIDEO_INPUTS,
|
||||
keywords: ["video converter", "mov to mp4", "mkv to mp4", "avi to mp4", "webm to mp4"],
|
||||
executionHint: "long",
|
||||
},
|
||||
{
|
||||
@@ -1111,6 +1121,7 @@ export const TOOLS: Tool[] = [
|
||||
route: "/convert-audio",
|
||||
modality: "audio",
|
||||
acceptedInputs: AUDIO_INPUTS,
|
||||
keywords: ["audio converter", "m4a to mp3", "aac to mp3", "wav to mp3", "ogg to mp3"],
|
||||
executionHint: "fast",
|
||||
},
|
||||
{
|
||||
@@ -1368,6 +1379,7 @@ export const TOOLS: Tool[] = [
|
||||
route: "/convert-spreadsheet",
|
||||
modality: "document",
|
||||
acceptedInputs: [".xlsx", ".xls", ".ods", ".csv"],
|
||||
keywords: ["excel to csv", "xlsx to csv", "spreadsheet converter"],
|
||||
executionHint: "long",
|
||||
},
|
||||
{
|
||||
@@ -1798,6 +1810,8 @@ export const TOOLS: Tool[] = [
|
||||
},
|
||||
];
|
||||
|
||||
export const TOOLS: Tool[] = [...BASE_TOOLS, ...expandConversionPresets(BASE_TOOLS)];
|
||||
|
||||
for (const tool of TOOLS) {
|
||||
const slug = `/${toolSection(tool)}`;
|
||||
if (!tool.route.startsWith(`${slug}/`)) {
|
||||
|
||||
Reference in New Issue
Block a user