Skip to content
Back to skills

140 Claude 2e792916

ASecurity

To avoid styling conflicts between Obsidian's styles and our plugin, follow these guidelines:

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 11, 2026
developmentapibackend

Works with

  • api

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 140-claude_2e792916 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 140 Claude 2e792916?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 140 Claude 2e792916
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-140-claude-2e792916/badge)](https://www.skillsdirectory.com/skills/tools-only-140-claude-2e792916)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# File Organizer 2000 - Developer Guide

## Styling Guidelines

To avoid styling conflicts between Obsidian's styles and our plugin, follow these guidelines:

### 1. Tailwind Configuration

- Tailwind is configured with custom Obsidian CSS variables
- Preflight is disabled to avoid conflicts with Obsidian's global styles
- Component isolation is achieved through `StyledContainer` wrapper
- **No prefix needed** - we removed the `fo-` prefix to allow JIT compilation to work properly

### 2. Component Style Isolation

For all new components:

1. Import the `StyledContainer` component from components/ui/utils.tsx:
```tsx
import { StyledContainer } from "../../components/ui/utils";
```

2. Wrap your component's root element with StyledContainer:
```tsx
return (
  <StyledContainer>
    {/* Your component content */}
  </StyledContainer>
);
```

3. Use the `tw()` function (alias for `cn()`) for class names with proper merging:
```tsx
import { tw } from "../../lib/utils";

// ...

<div className={tw("bg-white rounded-lg p-4")}>
  {/* content */}
</div>
```

4. For conditional classes, use `tw()` with multiple arguments:
```tsx
<div className={tw("bg-white rounded-lg", isActive && "border-blue-500")}>
  {/* content */}
</div>
```

### 3. Using Existing Components

Our UI components in `components/ui/` are already configured to use the proper prefixing.
Always prefer using these components when available:

- Button
- Card
- Dialog
- Badge
- etc.

### 4. Troubleshooting Style Issues

If you encounter style conflicts:

1. Check if the component is wrapped in a `StyledContainer`
2. Verify all classNames use the `tw()` function
3. Ensure no hardcoded CSS class names are being added (like `card` or `chat-component`)
4. Add more specific reset styles to the `.fo-container` class in styles.css if needed
5. Use browser dev tools to check if Tailwind classes are being applied

## Audio Transcription

### File Size Handling

The audio transcription feature uses a two-tier approach to handle files of different sizes:

1. **Small Files (< 4MB)**: Direct upload via multipart/form-data
   - Fastest method for smaller audio files
   - Direct to transcription API endpoint
   
2. **Large Files (4MB - 25MB)**: Pre-signed URL upload to R2
   - Bypasses Vercel's 4.5MB body size limit
   - Plugin gets a pre-signed URL from `/api/create-upload-url`
   - Uploads directly to R2 cloud storage
   - Backend downloads from R2 and transcribes
   - Reuses existing R2 infrastructure from file upload flow

3. **Files > 25MB**: Error message
   - OpenAI Whisper API has a hard 25MB limit
   - Users are instructed to compress or split audio

### Implementation Details

**Plugin-side** (`packages/plugin/index.ts`):
- `transcribeAudio()` (line ~515): Routes to appropriate upload method based on file size
- `transcribeAudioViaPresignedUrl()` (line ~547): Handles large file upload via R2

**Server-side**:
- `packages/web/app/api/(newai)/transcribe/route.ts`: 
  - Handles both direct uploads and pre-signed URL flow
  - `handlePresignedUrlTranscription()`: Downloads from R2 and transcribes
- `packages/web/app/api/create-upload-url/route.ts`: 
  - Generates pre-signed S3/R2 URLs (shared with file upload flow)

### Benefits of Pre-signed URL Approach

- ✅ No Vercel body size limitations (bypasses API gateway)
- ✅ Reuses existing R2 infrastructure
- ✅ Scalable to larger files (up to 25MB OpenAI limit)
- ✅ Better memory usage (streaming from R2)
- ✅ Same pattern as mobile app file uploads

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.