Y Combinator Application Status

Just making it a little easier to track your Y Combinator application status.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Y Combinator Application Status
// @namespace    https://www.linkedin.com/in/jarrettcoggin
// @version      2024-05-07
// @description  Just making it a little easier to track your Y Combinator application status.
// @author       Jarrett Coggin
// @match        https://apply.ycombinator.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=ycombinator.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    function createAndAppendContent(parent, tag, text) {
        var element = document.createElement(tag);
        element.innerText = text;
        parent.appendChild(element);
    }

    window.addEventListener('load', function() {
        var div = document.querySelector('div[data-react-props]');
        if (div) {
            var rawProps = div.getAttribute("data-react-props");
            try {
                var reactProps = JSON.parse(rawProps);
                console.log(reactProps);
                reactProps.all_apps.forEach(app => {
                    if (app.current_batch) {
                        var appId = app.id;
                        var selector = `a[href='apps/${appId}']`;
                        var linkElement = document.querySelector(selector);
                        if (linkElement) {
                            var parentDiv = linkElement.closest('div.mb-8.overflow-hidden.rounded-xl.bg-white.p-12.shadow-md.hover\\:shadow-xl');
                            var newContent = document.createElement('div');
                            newContent.innerHTML = '<h2>Application Status:</h2>';
                            createAndAppendContent(newContent, 'p', 'Status: ' + app.status);
                            createAndAppendContent(newContent, 'p', 'Rejected: ' + app.rejected);
                            createAndAppendContent(newContent, 'p', 'Stage: ' + app.stage);
                            createAndAppendContent(newContent, 'p', 'Invited: ' + app.invited);
                            createAndAppendContent(newContent, 'p', 'Result: ' + app.result);
                            createAndAppendContent(newContent, 'p', 'Updated At: ' + app.updated_at);
                            createAndAppendContent(newContent, 'p', 'Updated By User At: ' + app.updated_by_user_at);
                            createAndAppendContent(newContent, 'p', 'Interview: ' + app.interview);
                            createAndAppendContent(newContent, 'p', 'Interview in Person: ' + app.interview_in_person);
                            createAndAppendContent(newContent, 'p', 'Interview Questions Filled In: ' + app.interview_questions_filled_in);
                            createAndAppendContent(newContent, 'p', 'Interview Time: ' + app.interview_time);
                            createAndAppendContent(newContent, 'p', 'Interview Within 30 Mins: ' + app.interview_within_30_min);
                            createAndAppendContent(newContent, 'p', 'Last Message Replied To: ' + app.last_message_replied_to);
                            createAndAppendContent(newContent, 'p', 'Messages: ' + app.messages);
                            parentDiv.appendChild(newContent);
                        }
                    }
                });
            } catch (e) {
                console.error('Error parsing JSON or updating the page:', e);
            }
        } else {
            console.log('No div with data-react-props found');
        }
    });
})();