This job I applied for had a little chat widget in the corner of the page called “job bot” that offered “AI application assistance”. I feel like I can use all the help I could get so I clicked it. It asked for my name and email address, then provided a link to the page I was already on. screm-aaaaa

Bonus points: It was for an environmental conservation position screm-aaaaaaaaaaaaa

No I will not welcome our new AI overlords.

  • happybadger [he/him]@hexbear.net
    link
    fedilink
    English
    arrow-up
    6
    ·
    22 days ago

    You owe me $2500 for these three sentences, minus the intro which I give for free, and uploading a .CSV.

    Hi ChatGPT! Could you please code something for me? I need to take a preformatted .CSV spreadsheet and turn it into an HTML dashboard.

    Absolutely — I’d be happy to help. Before I start coding, I need just a bit more detail so I build exactly what you want: [list of UI elements, features, coding languages, and options to run locally or host online]. Send me the CSV structure and your goal — I’ll build it.

    [a spreadsheet with some weather data] This is an example of the spreadsheet format. I would like it to look clean but have filters, summary metrics, and tables. It will be run locally on my computer, but I would also like to publish it on a website.

    Perfect — I’ve looked at your CSV structure. It contains [variables]. Below is a complete, clean, modern HTML dashboard that: ✅ Loads your CSV file (via file upload — works locally) ✅ Displays summary metrics (Avg Max, Avg Min, Date Range, Record High/Low) ✅ Provides date range filtering ✅ Shows interactive charts (Chart.js) ✅ Displays a sortable data table ✅ Works locally AND when published to a website

    Super long-ass code that looks formatted correctly on ChatGPT’s website:

    spoiler

    `<!DOCTYPE html> <html> <head> <meta charset=“UTF-8”> <title>Temperature Dashboard</title>

    <!-- Chart.js --> <script src=“https://cdn.jsdelivr.net/npm/chart.js”></script>

    <!-- PapaParse for CSV parsing --> <script src=“https://cdn.jsdelivr.net/npm/papaparse@5.4.1/papaparse.min.js”></script>

    <style> body { font-family: Arial, sans-serif; margin: 20px; background: #f5f7fa; }

    h1 { text-align: center; }

    .dashboard { max-width: 1200px; margin: auto; }

    .metrics { display: flex; gap: 20px; margin-bottom: 20px; }

    .metric-card { flex: 1; background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); text-align: center; }

    .metric-card h2 { margin: 0; font-size: 18px; color: #555; }

    .metric-card p { font-size: 22px; font-weight: bold; margin: 5px 0 0; }

    .filters { margin-bottom: 20px; }

    table { width: 100%; border-collapse: collapse; background: white; margin-top: 20px; }

    th, td { padding: 8px; border-bottom: 1px solid #ddd; text-align: center; }

    th { cursor: pointer; background: #e9ecef; }

    canvas { background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); } </style> </head>

    <body>

    <div class=“dashboard”> <h1>Temperature Dashboard</h1>

    <input type=“file” id=“csvFile” accept=“.csv”>

    <div class=“filters”> Start Date: <input type=“date” id=“startDate”> End Date: <input type=“date” id=“endDate”> <button onclick=“applyFilter()”>Apply Filter</button> </div>

    <div class=“metrics”> <div class=“metric-card”> <h2>Average Max Temp</h2> <p id=“avgMax”>-</p> </div> <div class=“metric-card”> <h2>Average Min Temp</h2> <p id=“avgMin”>-</p> </div> <div class=“metric-card”> <h2>Record High</h2> <p id=“recordHigh”>-</p> </div> <div class=“metric-card”> <h2>Record Low</h2> <p id=“recordLow”>-</p> </div> </div>

    <canvas id=“tempChart”></canvas>

    <table id=“dataTable”> <thead> <tr> <th onclick=“sortTable(0)”>Date</th> <th onclick=“sortTable(1)”>Avg Max Temp</th> <th onclick=“sortTable(2)”>Avg Min Temp</th> </tr> </thead> <tbody></tbody> </table>

    </div>

    <script> let rawData = []; let filteredData = []; let chart;

    document.getElementById(‘csvFile’).addEventListener(‘change’, function(e) { Papa.parse(e.target.files[0], { header: true, dynamicTyping: true, complete: function(results) { rawData = results.data.map(row => ({ Date: new Date(row[“Date”]), Max: row[“Average of Max Temp”], Min: row[“Average of Min Temp”] })).filter(row => row.Date && row.Max && row.Min);

            filteredData = rawData;
            initializeDateInputs();
            updateDashboard();
        }
    });
    

    });

    function initializeDateInputs() { const dates = rawData.map(d => d.Date); const minDate = new Date(Math.min(…dates)); const maxDate = new Date(Math.max(…dates));

    document.getElementById("startDate").valueAsDate = minDate;
    document.getElementById("endDate").valueAsDate = maxDate;
    

    }

    function applyFilter() { const start = new Date(document.getElementById(“startDate”).value); const end = new Date(document.getElementById(“endDate”).value);

    filteredData = rawData.filter(d => d.Date >= start && d.Date <= end);
    updateDashboard();
    

    }

    function updateDashboard() { if (filteredData.length === 0) return;

    const avgMax = average(filteredData.map(d => d.Max));
    const avgMin = average(filteredData.map(d => d.Min));
    const recordHigh = Math.max(...filteredData.map(d => d.Max));
    const recordLow = Math.min(...filteredData.map(d => d.Min));
    
    document.getElementById("avgMax").innerText = avgMax.toFixed(2);
    document.getElementById("avgMin").innerText = avgMin.toFixed(2);
    document.getElementById("recordHigh").innerText = recordHigh.toFixed(2);
    document.getElementById("recordLow").innerText = recordLow.toFixed(2);
    
    renderChart();
    renderTable();
    

    }

    function average(arr) { return arr.reduce((a,b) => a+b, 0) / arr.length; }

    function renderChart() { const ctx = document.getElementById(‘tempChart’).getContext(‘2d’); if (chart) chart.destroy();

    chart = new Chart(ctx, {
        type: 'line',
        data: {
            labels: filteredData.map(d => d.Date.toLocaleDateString()),
            datasets: [
                {
                    label: 'Average Max Temp',
                    data: filteredData.map(d => d.Max),
                    borderColor: 'red',
                    fill: false
                },
                {
                    label: 'Average Min Temp',
                    data: filteredData.map(d => d.Min),
                    borderColor: 'blue',
                    fill: false
                }
            ]
        },
        options: {
            responsive: true,
            interaction: {
                mode: 'index',
                intersect: false
            },
            plugins: {
                legend: { position: 'top' }
            }
        }
    });
    

    }

    function renderTable() { const tbody = document.querySelector(“#dataTable tbody”); tbody.innerHTML = “”;

    filteredData.forEach(d => {
        const row = tbody.insertRow();
        row.insertCell(0).innerText = d.Date.toLocaleDateString();
        row.insertCell(1).innerText = d.Max.toFixed(2);
        row.insertCell(2).innerText = d.Min.toFixed(2);
    });
    

    }

    function sortTable(columnIndex) { const keys = [“Date”, “Max”, “Min”]; const key = keys[columnIndex];

    filteredData.sort((a, b) => {
        if (a[key] < b[key]) return -1;
        if (a[key] > b[key]) return 1;
        return 0;
    });
    
    updateDashboard();
    

    } </script>

    </body> </html> `

      • happybadger [he/him]@hexbear.net
        link
        fedilink
        English
        arrow-up
        10
        ·
        22 days ago

        Like selling MAGA and Jesus Slop or starting a meme coin for every breaking news story, it’s the cognitive dissonance that stops me. Even maintaining grass lawns at a landscaper made me feel like I was making a deal with the devil. Morally I could never justify selling someone their own alienation to the degree that AI creates.