This is a POC (Proof of concept) of how to draft a resume with AI
- javascript
- python
- deepseek/深度求索
- jobsdb
- docker
- pocketbase
Idea / Why ?
Simple, I need to find a job.
How ?
Current situation:
1. I've wrote a lot of scrapers in my codebase. (serve as a RAG for my own)
2. I've wrote a lot of AI prompt in my codebase. (serve as a RAG for my own)
3. I've wrote a lot of docker in my codebase. (serve as a RAG for my own)
4. It is simple to make use of them to create a AI automation flow (something like n8n)
Flow / Block diagram
1. Fetch the varices list from jobsdb
2. Scrape detail of varices jobsdb
3. Filter the job with matched nature/requirements
4. If Yes, send a notification to me
5. If No, review if the reason is technical
6. If the reason is technical, summarize it and send to me (such that I can update my portfolio under the table)
Conclusion
This project served as a kind of proof-of-concept(POC) level only.
It simply explore the un-official way to use deepseek.xtekky/deepseek4freeand craft/draft/temporize the AI of my projects(pet-projects) should look like. It also provide a switching capability to the paid official api (small refactoring work needed)
Resources:
1. Block HLD (High level design) source
Trigger source:
- trigger from page change
- trigger from routine check
Process / Extract:
- regular check, if new entry found, do scraping
- get which post should be scraped
- store the result to db
Process / AI / QnA:
- regular check, if new entry found, do asking deepseek
- deepseek automator to handle the Q and A between script and deepseek
flow_reporting:
- regular check, if new entry found, do asking deepseek
- job ad mismatch reason analysis
pocketbase served as a pool of "idea" exchange, it simply store the result from the job ad and then store it for next process
2. Flow HLD (High level design)source
Event source:
- regular check, if new entry found, execute the flow
Process / Extract:
- if new entry found, send the sanitized message(markdown) to deepseek (SendJobAdDetail)
- let deepseek summarize the job ad (AskDeepseekForCompanyBackgroundInformation)
- send louis background to deepseek (TellDeepseekForCandiateBackground)
- combine and consolidate the background of candidate and job (ConsolateInformationsAltogether)
- try to decide if they match (DB field: ds_decision_YN)
Process / Draft or Analyze:
- if recommend, draft application letter (DraftApplicationLetter)
- if not recommend, slightly find the reason (UpdateToPendingState)
3. Flow Reportingsource
Process / Analyze:
- send greetings, state scenario (SendGuidelines)
- review not recommended reason (QnAReviewNotRecommendReason)
Load:
- send louis background to deepseek to review why not recommended (UpdateDsDecisionReview)
4. Schema/DBML (Simplified / Minified, Conceptual only)
[
{
"001_fetch_job": {
"url_to_fetch": "url to fetch, usually a jobsdb link",
"done": "enum <FETCH | ERROR>",
"error": "{error result in json}",
"output": "{fetch output in json}",
"updated": "record update time",
"created": "record created time"
},
"002_job_list": {
"advertiserName_HTML": "company name outerHTML",
"advertiserName_MD": "company name in markdown",
"collectionId": "pbc_2009428707",
"collectionName": "002_job_list",
"created": "record create time",
"debug": "{debug use}",
"draft_application_letter_json": "{application letter draft in markdown format with meta}",
"ds_decision": "result from deepseek",
"ds_decision_YN": "YES | NO",
"ds_decision_review": "{deepseek review why not recommended}",
"ds_digest": "deepseek insight of the job post",
"ds_digest_meta": "{deepseek insight of the job post json format meta}",
"error": "{error collection}",
"id": "rcx0dv0qi270vgf",
"jobAdDetails_HTML": "job ad detail outerHTML",
"jobAdDetails_MD": "job ad detail markdown format",
"jobId": "84267209",
"jobLink": "link to original post",
"jobTitle": "title from original post",
"job_detail_classifications": "classification form original post",
"job_detail_location": "location from original post",
"job_detail_title": "title from original post",
"job_detail_work_type": "type from original post",
"name_of_company": "name from original post",
"status": "flow status",
"summarize_of_job_ad": "string",
"test": "",
"updated": "record update time"
}
}
]