PP193
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # WP final Project ## 已知問題 1. 在沒有買Tag的情況下戳持有標籤會跳出error 2. ## 功能 ### 首頁 (/) * 1. 追隨的使用者的最新圖片 * 查詢使用者追隨的帳號(user.liked_user)的最新圖片 2. 最新圖片 * 查詢所有使用者(picture sort by post_date)的最新圖片 3. 最熱門圖片 * picture.liked_count / 已上傳時間(日) 4. 搜尋欄 * 參考搜尋頁面的條件 ### 搜尋頁面 (/search) * 1. 正/反向tag (back-end) 3. 按最新/最舊搜尋 (front-end) 5. 按最有人氣搜尋 (總點讚數/發布日期至今為止) (front-end) 6. 按最多人點讚搜尋 (front-end) 7. tag條件排列 9. 展示列表 * 圖片   (onclick) * 圖片名稱 (onclick) * 作者   (onclick) ### 登入 (/login) * 1. 登入後跳轉首頁 * 導向到首頁 2. 導向註冊頁面 * 沒有 ### 註冊 (/register) * 1. 註冊後導向首頁 ### 圖片展示 (/picture/[pic_id]) * 1. 主要圖片 (picture.url) 2. tag標籤列表 (picture.tags) 3. 點讚功能 (user.liked_picture) 3. 圖片名稱 (picture.name) 4. 創作者 (picture.author) * 追蹤功能 (user.liked_user) * 對圖片的文字敘述 (picture.description) * 創作者其他圖片(最新) * 對圖片的留言 5. 推薦圖片列表 * 圖片   (onclick) * 圖片名稱 (onclick) * 作者   (onclick) ### 創作者個人資料頁面 (/profile) * 1. 創作者其他網站連結 ex: X, Facebook等 2. 修改名字 (user.name) 3. 修改電子信箱 (user.email) 4. 修改自我介紹 (user.bio) 5. 推薦作品 ### 創作者個人作品頁面 (/author/[author_id]) * 1. 創作者名字,自我介紹 (user.name user.bio) 2. 創作者其他網站連結 ex: X, Facebook等 (user.links) 3. 創作者最推薦的作品 (user.recommand_picture) 4. 創作者最新的作品 (user.post_picture sort by post_date) ### 付費頁面 (/donate/[author_id]) * 1. 用指定點數訂閱創作者 (user.coins) * 參考 https://mui.com/material-ui/getting-started/templates/pricing/ (private_tags, private_tags_cost) ### 點數儲值頁面 (/buy_coin) * 1. 做個假的 (user.coins) * 參考 https://mui.com/material-ui/getting-started/templates/pricing/ ### 私訊訊息面 (/message) 1. 點數 donate 功能 2. 圖片傳送 3. 訊息傳送 4. 連結處理 5. 自動滾動 6. 約稿功能 ## ``` POST /api/search payload { target: "", tags: [ {tagname: "", postive: bool}, ] } ``` ## DB scheme ``` import { index, text, pgTable, serial, uuid, varchar,integer } from "drizzle-orm/pg-core"; export const usersTable = pgTable( "users", { id: serial("id").primaryKey(), displayId: uuid("display_id").defaultRandom().notNull().unique(), username: text("username").unique(), email: varchar("email", { length: 100 }).notNull(), hashedPassword: varchar("hashed_password", { length: 100 }), provider: varchar("provider", { length: 100, }).notNull().default("credentials"), name: text("name"), quote: text("quote"), title: text("title"), birthday: text("birthday"), bio: text("bio"), links: text("links"), // "link0,link1..." liked_picture: integer("like_picture").array(), liked_user: integer("liked_user").array(), post_picture: integer("post_picture").array(), private_tags: integer("private_tags").array(), private_tags_cost: integer("private_tags_cost").array(), owned_private_tag: integer("owned_private_tag").array(), coins: integer("coins"), }, (table) => ({ displayIdIndex: index("display_id_index").on(table.displayId), emailIndex: index("email_index").on(table.email), }), ); export const pictureTable = pgTable( "picture", { pic_id: serial("pic_id").primaryKey(), url: text("url"), author: text("author"), name: text("name"), description: text("description"), post_date: text("post_date"), liked_count: integer("liked_count"), recommand_point: integer("recommand_point"), tags: text("tags").array(), message: text("message"), }, ); export const transactionTable = pgTable( "transaction", { tx_id: serial("tx_id").primaryKey(), from_user: text("from_user"), to_user: text("to_user"), amount: integer("amount"), timestamp: text("timestamp") } ) // Remaining code for relations and other tables remains unchanged ``` # spec ~~2. **題目範圍**:不限,但必須是與網路應用相關,且必須要包含前端應用 (如網頁、Browser Extension、App)、後端伺服器、以及資料庫。如果此題目為先前作品/專題的延續,而非修這門課時的原創,也請在期末專題報告中提供說明。請注意,我們評分時會以本學期實作的部分為限,必要時,我們也請你們提供在此專題貢獻的證明。~~ ~~4. **使用技術**: - 前端:限使用 React.js 或 React 相關框架 (e.g. NextJS, React Native)、或原生的 JavaScript/TypeScript - 後端:原則上使用 NextJS and/or Express.js(Node.js), 但如果因為應用需要,也可以採用其他 JavaScript/TypeScript 框架甚至其他語言 (e.g. Python) - 資料庫:不限,只要能確保後端伺服器關機或是重開之後,資料仍然存在即可 - 第三方套件、框架、程式碼:不限,可以採用任何開源、或非開源的套件、框架、或程式碼,但請務必在期末報告中詳細說明。未揭露者不論是否故意,皆會被視為抄襲,而導致期末與學期成績嚴重扣分。 - 如果做成手機 APP, 至少應要有個網頁版的控制/管理後台,或者是用 React Native 來開發 UI/UX,以符合上述條件。~~ 4. **期末專題目錄命名以及 GitHub 放置規定**:為了讓助教可以順利的 clone 到你們的期末專題 (Note: 助教會把你的 code clone 到 local, 並在 local 環境進行測試),請在你們組長的 GitHub 的 **wp1121** repo 底下,建立一個 “**final**” 的目錄,將你們的期末專題 push 至此。至於 final 底下你們想要怎麼安排、命名目錄,甚至想要獨立建立一個符合你們專題的目錄名稱,都 OK. 但請盡量 follow 一般 or 上課示範的 convention, 以利老師與助教閱讀你們的程式碼。 - 由於你們的 wp1121 repo 為 private, **如果你們想要把期末專題 open source**, 建議另外開一個 public 的 repo, 並自行維護兩者的關係。 - 一個作法是先建立此專題的 public repo, 然後主要在此 repo 開發,待有一個穩定的版本的時候 (可以打個版號),將他 clone 下來,然後複製、上傳到 wp1121/final 裡面,以確保此 final 目錄隨時有可執行/demo 的版本。俟最後 deadline 前,請記得 push 一份 for final project 的最終穩定版。**請注意:助教會在 deadline 到了就把 code clone 下來,之後的修改將不計入期末專題的評分之中。** - 雖然沒有硬性規定,但**請不要在 deadline 之前將你的 wp1121 變成 public.** - 為了可以共同協作,請將同組其他成員加入此 wp1121 repo 之 collaborators. 5. **雲端部署**:本課程規定一定要將你們的網路服務部署到雲端,如果需要帳密登入你的服務,請在期末報告中提供一組帳密,或者是提供註冊的服務,以利助教以及老師使用你們的服務和評分。不過請注意自己服務的網路安全性,如果因故被駭,請自行負責。如果有流量或者是開啟時間之限制,請在 [README.md](http://readme.md/) 中說明,並且告知網管聯絡方式,以利助教或老師提出登入需求。 ~~6. **題目發想與交流**: 先前同學們 ideations 的收集[在此](https://www.notion.so/e2e35d7de6c94d828c4883ff7357103f?pvs=21),歡迎同學們自行參考並尋找志同道合的組員。如果需要授課老師的協助,請儘早告知。~~ ~~8. **組隊期限**: 期末專題的評分將會採計組員互評的分數,所以遇到雷隊友、或者是處不來的組員,勢必會影響期末專題的進行。所以,請謹慎選擇題目與組員,當然,也請扮演好組員的角色。請在 11/29(三) 9pm 前至 [此表格](https://docs.google.com/forms/d/e/1FAIpQLScN3GTndf0smmeKrGAB_S0f0u9VgEtuqxU7CdmbH14IMzbamA/viewform) 填寫你們最後的分組資訊。一但超過期限,則不可再要求換組/併組/拆組,而未填寫資訊者,期末專題將以 0 分計算。~~ 10. **期末專題 deadline**: **12/30(六) 9pm**, 除了專題的程式碼需要 push 到 GitHub 之外,請在此 deadline 之前完成以下 (9 ~ 13) 事項,逾時未完成者則算遲交。 9. **期末 demo 影片 (以組為單位)**: - 由於預期組數將超過 70 組,我們不可能舉行 demo day,因此,我們將 demo 改為 **請大家自行錄製 demo 影片上傳** - 影片長度不得超過 6 分鐘,請在專題 deadline 前,上傳至雲端空間 (preferrably a video hosting service),如 NTU G Suite, Youtube, Vimeo, FB 等 - 影片內容至少應包含: - 簡單自介 (組別、組員姓名、題目名稱) - 三句話內介紹你們的題目在做什麼 - Project Demo - 程式碼架構/使用技術介紹 - Optional 內容:動機/心得、投影片 or 其他輔助說明 - 影片拍攝製作技巧、有沒有露臉、畫質 (只要不要真的太差)… 等,不在評分範圍,大家不需要在這方面軍備競賽 10. **FB 社團貼文分享 (以組為單位)**:為了促進修課同學分享,發揮開源的精神,請於專題 deadline (i.e. 12/30(六) 9pm) 之前至 FB 社團貼文公告作品,內容應包含 (建議按照此順序): - PO 文的第一行請統一加上 **[121-1] Web Programming Final** 作為標題 - 專題題目名稱 // 前面請加上組別: **(Group xx) Your Title** - Demo 影片連結 - 描述這個服務在做什麼 - Deployed 連結 (如有自己有安全性的疑慮,則可以不用在 FB 社團公告此項) - (如果有給 deployed 連結) 使用/操作方式 (含伺服器端以及使用者端) - (Optional, 如果你有另外建立一個開源的 repo) Github link (請不要給成你的 private wp1111 repo <= 別人看不到) - 其他說明 - 使用與參考之框架/模組/原始碼 - 使用之第三方套件、框架、程式碼 - 專題製作心得 11. **期末專題繳交資訊收集 (以組為單位,12/15 後開放填寫)**:為了方便我們收集你們的專題的各項資訊,以利評分以及後續的分享,請在期末專題 deadline (i.e. 12/30(六) 9pm) 前至此 [Google Form](https://hackmd.io/o6YpWVxrRwq1SmolfMdP6g?view) 填寫專題相關資訊,包含: - 組別 - 組長中文姓名 - 題目名稱 - Deployed service 網址 - Github Repo 網址 - Demo 影片網址 - FB 社團貼文網址 - (Optionoal) 其他想提醒老師與助教評分之事項 12. **期末專題報告 (以組為單位)**:請在 wp1121/final 目錄放上 [README.md](http://readme.md/), 作為期末報告,除了上述公告在 FB 社團的內容之外,也請加上: - **如何在 localhost 安裝與測試之詳細步驟** - 請務必詳述,包含:基本的 yarn/npm 指令,後端如果使用其他語言所需要之安裝環境說明,資料庫串接與資料匯入方式,登入之帳密 (if needed)… 等。 - **助教/老師會完全按照此步驟執行安裝**, 請不要期待助教/老師需要自己看懂你的系統架構/script 猜測安裝之指令。 - 如果助教/老師會按照此步驟安裝遇到任何的問題,導致無法 compile/執行,可歸因於同學之疏失者,一律按照底下之扣分標準給予 penalty。 - 至於測試,**我們會按照你們提供的功能說明來測試**,如有一些特別需要注意或是展示的地方,請說明清楚,或是提供測資。 - 每位組員之負責項目 (請詳述) - 如果有找外掛,請務必特別註明 (i.e. 不要只寫名字,我們無法直接從名字判斷是否有修課),並說明原因(為什麼要找外掛),且明確描述自己以及外掛的貢獻。必要時,我們會做 reference check. - 如果此專題是之前作品/專題的延伸,請務必在此說明清楚 (本學期的貢獻) - (Optional) 對於此課程的建議 ## Reference 助教的notion clone(學習auth) 林文博的hw4(學習api call) 葉咸礽的hw1(express server) 葉咸礽的hw4(傳訊息) chatgpt3.5 chatgpt4.0 ## 使用的套件 Next/Auth Mui Pusher MongoDB express Postgresql drizzle-orm ## install 在本次作業中 我們使用兩個server來run 所以安裝步驟會稍微複雜一點 STEP0 進入放有我們程式的資料夾 STEP1 參照.env.example 設定好環境 STEP2 在資料夾內進行yarn STEP3 在資料夾內進行yarn migrate STEP4 多開一個terminal STEP5 用多開的terminal進入 express_server資料夾 npm i STEP6 在多開的termial輸入 node index.js 開啟server STEP7 在原本的terminal 中輸入yarn dev 開啟server ## .env.example如下 ``` POSTGRES_URL= MONGO_URL= PUSHER_ID= NEXT_PUBLIC_PUSHER_KEY= PUSHER_SECRET= NEXT_PUBLIC_PUSHER_CLUSTER= AUTH_GOOGLE_ID= AUTH_GOOGLE_SECRET= AUTH_SECRET= AUTH_GITHUB_ID= AUTH_GITHUB_SECRET= NEXT_PUBLIC_BASE_URL=http://localhost:3000/ PICTURE_SERVER_URL=http://localhost:8000/ ``` ### .env 所需操作 1. POSTGRES_URL的設置方式請參照課堂上的twitter-clone的部份做 2. MONGO_URL 的設置方式可以參考課堂上教的MONGO_URL設定 3. PUSHER以及AUTH_SECRET及AUTH_GITHUB的部份請參考課堂上教的notion-clone 4. AUTH_GOOGLE的部份請參考下列兩隻影片的設定方式 https://www.youtube.com/watch?v=A53T9_V8aFk https://www.youtube.com/watch?v=Wi3CEhPEEuw ## deploy的流量限制以及開啟時間限制 1. 請上傳的圖片不要超過10 MB 2. 請不要上傳過多的圖片 以及創立太多的帳號 我們選擇使用的是免費的mongodb以及neon 所以運算資源不太足夠 3. deploy 網頁很慢請耐心等待 理由同上 4. 我們負責處理圖片的express server是架在葉咸礽的宿舍電腦上 所以可能會受到宿舍網路等不可抗力因素影響. ~~PO 文的第一行請統一加上 [121-1] Web Programming Final 作為標題~~ ~~專題題目名稱 // 前面請加上組別: (Group xx) Your Title~~ ~~Demo 影片連結~~ ~~描述這個服務在做什麼~~ ~~Deployed 連結 (如有自己有安全性的疑慮,則可以不用在 FB 社團公告此項)~~ ~~(如果有給 deployed 連結) 使用/操作方式 (含伺服器端以及使用者端)~~ ~~(Optional, 如果你有另外建立一個開源的 repo) Github link (請不要給成你的 private wp1111 repo <= 別人看不到)~~ 其他說明 使用與參考之框架 / 模組 / 原始碼 使用之第三方套件、框架、程式碼 專題製作心得 ## FB貼文 [121-1] Web Programming Final: (Group 11) Demo Link: https://youtu.be/aDFNKgxI32M Deploy Link: https://wp-final-project.vercel.app/ 這個網站是以「標籤」為中心的圖文網站,為了服務創作者及藝文愛好者而誕生。 使用者可以上傳圖片及文字、進行點數交易,利用點數購買的特殊標籤,達成訂閱或購買圖片的操作。在search的部份,我們有提供正向標籤以及反向標籤來進行查詢。同時,我們也提供了便利的點數交易手段、轉帳及聊天室等功能。 網站使用注意事項: 1. 請不要上傳超過10MB的圖片 2. 請上傳jpeg或png的圖片 組長:B10902052 葉咸礽 心得:這次 Final Project 我嘗試整合整個學期學到的各種工具,這讓我對這些網頁工具有了更進一步的認識。並由於必須大量查看 Mui 文檔,也稍稍提升了閱讀前端程式碼的能力。這個 Final Project 對我來說不只是爆肝而已,最後專題完成的成就感,讓我似乎能夠感受到寫程式的樂趣了。 順帶一題,樓下這個人 response data 大小寫打錯,害我吃不到資料 組員:B10902115 林文博 心得: 在這次的final project中我負責大部分除了messenge以外的後端操作, 以及一點小部份的前端修改, 還有前半部份的next/auth處理. 透過這次的作業, 我更加的熟悉了drizzle-orm的使用方式, 以其他的資料處理技巧, 然而,因為一開始的策略錯誤以及時間安排上的失誤, 讓我的這次作業做的有點趕, 做到有點壓力,不過這也算是一種難得的體驗. 總體而言 透過這次作業我對於原本不熟悉的後端及database的操作更加的熟悉了 同時也增進了長時間大量寫程式的經驗. 題外話,樓上這個人positive拼成postive害我後端接不到東西 然後還把disabled都放著不做. Reference: 參考hw4及notion clone來處理auth及某些溝通 並與chatgpt溝通完成部份程式 使用工具: * Next.js + Typescript : 作為我們程式的主要架構 * Material-UI : 用以增進前端操作美觀 * Next/Auth : 登入及在網頁中的使用者身份確認 * Pusher : 負責訊息系統的實時溝通 * MongoDB : 訊息系統 DataBase * Postgresql : 其他所有 DataBase * express + node.js : 圖床 Server * neon : 用來做除了訊息系統以外的資料庫 * drizzle-orm : 用來幫助 Query 資料庫

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully