🏆 Leaderboard
Loading…
📄

Contest Rules  /  Thể Lệ Cuộc Thi

Everything you need to know about "Loving Moments" — Khoảnh Khắc Yêu Thương

📷
What to submit
Nội dung dự thi
A photo capturing a meaningful family moment — reunions, shared meals, everyday care, or simple activities together.
Ảnh ghi lại khoảnh khắc đáng nhớ trong gia đình — đoàn tụ, bữa cơm chung, chăm sóc nhau hoặc các hoạt động đời thường.
📧
How to enter
Cách tham gia
Each union member submits one (1) photo to the Trade Union representative. The admin will upload it on your behalf.
Mỗi đoàn viên nộp 01 ảnh cho cán bộ Công đoàn. Admin sẽ đăng ảnh lên hệ thống thay cho bạn.
❤️
Voting
Bình chọn
Each employee may vote for up to 3 photos. Scores are based on total likes. Votes are tied to your company email.
Mỗi nhân viên được bình chọn tối đa 3 ảnh. Kết quả dựa trên tổng lượt thích. Mỗi email chỉ được vote 3 lượt.
🎁
Prizes
Giải thưởng
1st (×1) • 2nd (×2) • 3rd (×3) • Honorable (×4). Total: 1,800,000 VND
Nhất (×1) • Nhì (×2) • Ba (×3) • Khuyến Khích (×4). Tổng: 1.800.000 VNĐ
Key dates
Lịch trình
📩
Jun 22 – 17:00
Submission deadline
Hạn nộp ảnh
❤️
Jun 23 – Jun 25
Voting period
Thời gian bình chọn
🎉
Jun 26
Results announced
Công bố kết quả
Prize breakdown / Chi tiết giải thưởng
Prize / GiảiWinnersValueTotal
🥇 1st / Nhất1300,000 VND300,000 VND
🥈 2nd / Nhì2250,000 VND500,000 VND
🥉 3rd / Ba3200,000 VND600,000 VND
🌟 Honorable / KK4100,000 VND400,000 VND
🛡️

Admin Panel

Manage contest entries and company branding

🖼️ Company Logo

🖼️
Click to upload your company logo
PNG or SVG recommended · appears in the header on all pages
Logo preview
Preview — click "Save Logo" to apply

➕ Add contest entry

📷
Click to choose photo
JPG or PNG · max 10 MB
Photo preview

📋 Contest entries 0 entries

No entries yet
⚠️ Default admin password: scgjwd2026 — change ADMIN_PWD in the script before going live.
ℹ️ Running in demo mode (localStorage). Fill in SUPABASE_URL and SUPABASE_ANON_KEY to enable real-time sync.

Run this SQL in your Supabase SQL editor first:
-- 1. Photos table create table photos ( id uuid default gen_random_uuid() primary key, name text not null, caption text default '', email text default '', photo_url text default '', votes integer default 0, created_at timestamptz default now() ); -- 2. Votes table (prevents duplicate votes) create table votes ( id text primary key, email text, name text, photo_id uuid references photos(id) on delete cascade, created_at timestamptz default now() ); -- 3. Atomic vote increment function create or replace function increment_vote(p_id uuid) returns void language sql as $$ update photos set votes = votes + 1 where id = p_id; $$; create or replace function decrement_vote(p_id uuid) returns void language sql as $$ update photos set votes = greatest(0, votes - 1) where id = p_id; $$; -- 4. Allow public access (internal app) alter table photos enable row level security; alter table votes enable row level security; create policy "open" on photos for all using (true) with check (true); create policy "open" on votes for all using (true) with check (true);
Then create a Storage bucket named photos and set it to Public.