Browser-based audio transcription tool with secure S3 storage and role-based access control.
- Node.js (v18+)
- AWS Account with S3 access
- Supabase account
- Vercel account (for deployment)
git clone https://github.com/hayderkharrufa/audio-labeling-tool.git
cd audio-labeling-tool
npm install
npm install -g supabase- Create S3 bucket (private - block all public access)
- Create IAM user:
supabase-audio-access - Create policy for S3 read access:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
}
]
}- Create access keys for the IAM user
supabase login
supabase link --project-ref YOUR_PROJECT_REF
supabase db pushCreate admin user in Supabase SQL Editor:
INSERT INTO profiles (id, name, role)
VALUES ('your-user-id', 'Admin', 'ADMIN');Create .env.local:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
AWS_REGION=us-east-1
AWS_BUCKET_NAME=your-bucket-nameDeploy Edge Function:
supabase secrets set --env-file ./.env.local
supabase functions deploy get-audio-urlnpm run devDeploy to Vercel:
vercelSet environment variables in Vercel dashboard:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Admin: Create projects → Create datasets → Add S3 audio file URLs
- Users: Claim transcription/QA tasks → Create segments → Transcribe → Submit
- Audio files are accessed securely via pre-signed URLs (1-hour expiry)