Skip to content

Commit de34705

Browse files
lwinmoepaingclaude
andcommitted
✨ feat(jobs): add job board with CRUD, auth-gated pages, i18n, date picker, and spam disclaimer
Add full job board feature mirroring the blog system architecture: - Firestore CRUD (firestore-jobs.ts) with cursor pagination and daily publish limit - Job editor hook with 5s auto-save debounce - Pages: listing, write, edit, my-jobs, detail (all with prism UI theme) - DatePicker component (react-day-picker + floating-ui) with min-date validation - Expiration date field with expired badge on cards and detail page - Spam disclaimer notice on job detail page - Navbar + UserAvatar dropdown integration - Full en/mm i18n translations - Myanmar font (khitHaungg) applied to ContentEditor and ContentRenderer Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 4f9c065 commit de34705

24 files changed

Lines changed: 2879 additions & 3 deletions

bun.lockb

1.88 KB
Binary file not shown.

messages/en.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"editor": "Editor",
6363
"howTo": "How to",
6464
"blog": "Blog",
65+
"jobs": "Jobs",
6566
"contact": "Contact",
6667
"navigation": "Navigation",
6768
"brandName": "Myanmar Software Engineers"
@@ -214,6 +215,47 @@
214215
"maxPostsPerDay": "Max 3 posts/day",
215216
"loadMore": "Load more"
216217
},
218+
"jobs": {
219+
"label": "Job Opportunities",
220+
"title": "Jobs",
221+
"subtitle": "Discover job opportunities posted by Myanmar's software engineering community.",
222+
"job": "Job",
223+
"jobsCount": "Jobs",
224+
"viewDetails": "View details",
225+
"noJobsTitle": "No jobs yet",
226+
"noJobsBody": "Job opportunities are coming soon. Community members will be posting positions here.",
227+
"postJob": "Post Job",
228+
"newJob": "New Job",
229+
"myJobs": "My Jobs",
230+
"saveDraft": "Save Draft",
231+
"publish": "Publish",
232+
"unpublish": "Unpublish",
233+
"editJob": "Edit Job",
234+
"deleteJob": "Delete Job",
235+
"postNewJob": "Post New Job",
236+
"formPosition": "Position",
237+
"formPositionPlaceholder": "Job title (e.g. Senior Frontend Engineer)",
238+
"formTag": "Job Type",
239+
"formTagPlaceholder": "e.g. Full-time, Remote, Contract",
240+
"formSkills": "Skills",
241+
"formSkillsPlaceholder": "Add skills (press Enter)",
242+
"formEmail": "Office Email",
243+
"formEmailPlaceholder": "hr@company.com",
244+
"formExpiredAt": "Expiration Date",
245+
"formExpiredAtPlaceholder": "Select expiration date",
246+
"formExpiredAtHint": "Must be a future date. Job listing will be marked as expired after this date.",
247+
"formDescription": "Description",
248+
"formDescriptionPlaceholder": "Describe the role, requirements, and benefits... (type / for commands)",
249+
"saving": "Saving...",
250+
"autoSaveNote": "Auto-saves every 5s",
251+
"published": "Published",
252+
"draft": "Draft",
253+
"maxPostsPerDay": "Max 3 posts/day",
254+
"loadMore": "Load more",
255+
"loading": "Loading...",
256+
"disclaimerLabel": "Disclaimer:",
257+
"disclaimerText": "This job post is community-submitted and has not been fully verified. Please visit the company's official website and verify the provided information before applying."
258+
},
217259
"auth": {
218260
"signIn": "Sign In",
219261
"signOut": "Sign Out",

messages/mm.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"editor": "အယ်ဒီတာ",
6363
"howTo": "လမ်းညွှန်",
6464
"blog": "ဘလော့ဂ်",
65+
"jobs": "အလုပ်များ",
6566
"contact": "ဆက်သွယ်ရန်",
6667
"navigation": "လမ်းညွှန်",
6768
"brandName": "မြန်မာ ဆော့ဖ်ဝဲ အင်ဂျင်နီယာများ"
@@ -214,6 +215,47 @@
214215
"maxPostsPerDay": "တစ်ရက် ၃ ပုဒ်အထိ",
215216
"loadMore": "ထပ်ကြည့်ရန်"
216217
},
218+
"jobs": {
219+
"label": "အလုပ်အကိုင် အခွင့်အလမ်းများ",
220+
"title": "အလုပ်များ",
221+
"subtitle": "မြန်မာ ဆော့ဖ်ဝဲ အင်ဂျင်နီယာ အသိုင်းအဝိုင်းမှ တင်ထားသော အလုပ်အကိုင် အခွင့်အလမ်းများကို ရှာဖွေပါ။",
222+
"job": "အလုပ်",
223+
"jobsCount": "အလုပ်များ",
224+
"viewDetails": "အသေးစိတ် ကြည့်ရန်",
225+
"noJobsTitle": "အလုပ်ခေါ်စာ မရှိသေးပါ",
226+
"noJobsBody": "အလုပ်အကိုင် အခွင့်အလမ်းများ မကြာမီ ရောက်လာပါမည်။ အသိုင်းအဝိုင်း အဖွဲ့ဝင်များ ဤနေရာတွင် ရာထူးများ တင်ပါမည်။",
227+
"postJob": "အလုပ်ခေါ်စာ တင်ရန်",
228+
"newJob": "အလုပ်ခေါ်စာအသစ်",
229+
"myJobs": "ကျွန်ုပ်၏ အလုပ်ခေါ်စာများ",
230+
"saveDraft": "မူကြမ်း သိမ်းရန်",
231+
"publish": "ထုတ်ဝေရန်",
232+
"unpublish": "ပြန်ရုပ်ရန်",
233+
"editJob": "အလုပ် ပြင်ရန်",
234+
"deleteJob": "အလုပ် ဖျက်ရန်",
235+
"postNewJob": "အလုပ် အသစ် တင်ရန်",
236+
"formPosition": "ရာထူး",
237+
"formPositionPlaceholder": "ရာထူး (ဥပမာ - Senior Frontend Engineer)",
238+
"formTag": "အလုပ် အမျိုးအစား",
239+
"formTagPlaceholder": "ဥပမာ - Full-time, Remote, Contract",
240+
"formSkills": "ကျွမ်းကျင်မှုများ",
241+
"formSkillsPlaceholder": "ကျွမ်းကျင်မှု ထည့်ရန် (Enter နှိပ်ပါ)",
242+
"formEmail": "ရုံးခန်း အီးမေးလ်",
243+
"formEmailPlaceholder": "hr@company.com",
244+
"formExpiredAt": "သက်တမ်းကုန်ဆုံးရက်",
245+
"formExpiredAtPlaceholder": "သက်တမ်းကုန်ဆုံးရက် ရွေးပါ",
246+
"formExpiredAtHint": "အနာဂတ်ရက်စွဲ ဖြစ်ရပါမည်။ ဤရက်စွဲပြီးနောက် အလုပ်ကြော်ငြာသည် သက်တမ်းကုန်ဆုံးအဖြစ် မှတ်သားမည်။",
247+
"formDescription": "ဖော်ပြချက်",
248+
"formDescriptionPlaceholder": "ရာထူး၊ လိုအပ်ချက်များနှင့် အကျိုးခံစားခွင့်များ ဖော်ပြပါ... (/ ရိုက်၍ command များ သုံးနိုင်ပါသည်)",
249+
"saving": "သိမ်းနေသည်...",
250+
"autoSaveNote": "၅ စက္ကန့်တိုင်း အလိုအလျောက် သိမ်းပါသည်",
251+
"published": "ထုတ်ဝေပြီး",
252+
"draft": "မူကြမ်း",
253+
"maxPostsPerDay": "တစ်ရက် ၃ ပုဒ်အထိ",
254+
"loadMore": "ထပ်ကြည့်ရန်",
255+
"loading": "ဖွင့်နေသည်...",
256+
"disclaimerLabel": "သတိပေးချက်:",
257+
"disclaimerText": "ဤအလုပ်ခေါ်စာသည် Community မှ တင်သွင်းထားခြင်းဖြစ်ပြီး အပြည့်အဝ စစ်ဆေးအတည်ပြုထားခြင်း မရှိသေးပါ။ လျှောက်ထားမည်ဆိုပါက ကုမ္ပဏီ၏ တရားဝင် website နှင့် ပေးထားသော အချက်အလက်များကို ကိုယ်တိုင် စစ်ဆေးအတည်ပြုပါ။"
258+
},
217259
"auth": {
218260
"signIn": "ဝင်ရောက်ရန်",
219261
"signOut": "ထွက်ရန်",

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"next-contentlayer2": "^0.5.8",
6363
"next-intl": "^4.8.3",
6464
"react": "19.2.4",
65+
"react-day-picker": "^9",
6566
"react-dom": "19.2.4",
6667
"react-icons": "^4.11.0",
6768
"react-markdown": "^10.1.0",

0 commit comments

Comments
 (0)