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)

1. Block HLD (High level design) source

placeholder

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

placeholder

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

placeholder

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"
    }
  }
]
louis portfolio