<mxfile host="65bd71144e">
    <diagram id="arch" name="Architecture">
        <mxGraphModel dx="1446" dy="890" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
            <root>
                <mxCell id="0"/>
                <mxCell id="1" parent="0"/>
                <mxCell id="2" value="GitHub Actions&#xa;cron: JST 8:00" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=13;" parent="1" vertex="1">
                    <mxGeometry x="180" y="70" width="200" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="3" value="Python スクリプト&#xa;src/cli/main.py" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=13;" parent="1" vertex="1">
                    <mxGeometry x="180" y="190" width="200" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="10" value="記事収集例（並列）" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
                    <mxGeometry x="450" y="285" width="160" height="40" as="geometry"/>
                </mxCell>
                <mxCell id="11" value="RSS (13 フィード)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;fontSize=11;" parent="1" vertex="1">
                    <mxGeometry x="460" y="340" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="12" value="Qiita API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;fontSize=11;" parent="1" vertex="1">
                    <mxGeometry x="460" y="380" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="13" value="dev.to API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;fontSize=11;" parent="1" vertex="1">
                    <mxGeometry x="460" y="420" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="14" value="Hacker News API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;fontSize=11;" parent="1" vertex="1">
                    <mxGeometry x="460" y="460" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="15" value="Reddit JSON API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;fontSize=11;" parent="1" vertex="1">
                    <mxGeometry x="460" y="500" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="16" value="SpeakerDeck Atom" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;fontSize=11;" parent="1" vertex="1">
                    <mxGeometry x="460" y="540" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="20" value="Gemini API&#xa;gemini-2.5-flash" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=13;" parent="1" vertex="1">
                    <mxGeometry x="300" y="310" width="160" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="21" value="LINE Messaging API&#xa;Flex Message" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontStyle=1;fontSize=13;" parent="1" vertex="1">
                    <mxGeometry x="180" y="570" width="200" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="30" value="Cloudflare KV&#xa;(settings / articles / preferences)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;fontSize=12;" parent="1" vertex="1">
                    <mxGeometry x="770" y="390" width="240" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="31" value="Cloudflare Worker&#xa;LINE Webhook 受信 + HMAC 検証" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;fontSize=12;" parent="1" vertex="1">
                    <mxGeometry x="770" y="500" width="240" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="32" value="Cloudflare Pages&#xa;Next.js Dashboard" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;fontSize=12;" parent="1" vertex="1">
                    <mxGeometry x="170" y="710" width="240" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="40" style="edgeStyle=orthogonalEdgeStyle;" parent="1" source="2" target="3" edge="1">
                    <mxGeometry relative="1" as="geometry"/>
                </mxCell>
                <mxCell id="42" style="edgeStyle=orthogonalEdgeStyle;" parent="1" source="3" target="20" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="320" y="300"/>
                            <mxPoint x="360" y="300"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="43" style="edgeStyle=orthogonalEdgeStyle;" parent="1" source="3" target="21" edge="1">
                    <mxGeometry relative="1" as="geometry"/>
                </mxCell>
                <mxCell id="44" style="edgeStyle=orthogonalEdgeStyle;" parent="1" source="3" target="30" edge="1">
                    <mxGeometry relative="1" as="geometry"/>
                </mxCell>
                <mxCell id="45" style="edgeStyle=orthogonalEdgeStyle;" parent="1" source="31" target="30" edge="1">
                    <mxGeometry relative="1" as="geometry"/>
                </mxCell>
                <mxCell id="46" style="edgeStyle=orthogonalEdgeStyle;" parent="1" source="32" target="30" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="1050" y="740"/>
                            <mxPoint x="1050" y="420"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="47" style="edgeStyle=orthogonalEdgeStyle;" parent="1" source="21" target="31" edge="1">
                    <mxGeometry relative="1" as="geometry"/>
                </mxCell>
                <mxCell id="52" value="1.&amp;nbsp;&lt;span style=&quot;color: rgb(63, 63, 63);&quot;&gt;Cludeflare KVの設定、&lt;/span&gt;ユーザーの好みを考慮してGeminiで記事収集&lt;div&gt;2. 記事をCludeflare KVにput&lt;/div&gt;&lt;div&gt;3. lineで記事をpush&lt;/div&gt;" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;" vertex="1" parent="1">
                    <mxGeometry x="390" y="90" width="210" height="120" as="geometry"/>
                </mxCell>
                <mxCell id="54" value="記事のFB(Good/ Bad)をCludeflare KVにput" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;position2=0.74;" vertex="1" parent="1">
                    <mxGeometry x="70" y="470" width="190" height="80" as="geometry"/>
                </mxCell>
                <mxCell id="55" value="- ユーザーの好み&lt;div&gt;- 収集する記事の設定&lt;/div&gt;&lt;div&gt;- 収集するカテゴリの設定&lt;/div&gt;&lt;div&gt;etc&lt;/div&gt;" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;" vertex="1" parent="1">
                    <mxGeometry x="900" y="270" width="190" height="110" as="geometry"/>
                </mxCell>
                <mxCell id="56" value="設定画面" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;position2=0.74;" vertex="1" parent="1">
                    <mxGeometry x="30" y="650" width="190" height="80" as="geometry"/>
                </mxCell>
            </root>
        </mxGraphModel>
    </diagram>
</mxfile>