Skip to main content

max / makenotwork

4.3 KB · 93 lines History Blame Raw
1 <div class="tab-docs"><a href="/docs/developer/synckit">Docs: Cloud Sync &rarr;</a></div>
2
3 <div class="content-section">
4 <div class="section-header">
5 <h2 class="subsection-title">Cloud Sync</h2>
6 </div>
7
8 <p class="form-hint proj-synckit-intro">Cloud Sync lets your desktop or mobile apps sync data with Makenotwork using end-to-end encryption. If you're building an app that stores user data, create a sync app here to get an API key your app uses to connect. <a href="/docs/developer/synckit">Learn more</a></p>
9 <p class="form-hint proj-synckit-intro-secondary">Most creators don't need this: it's for developers who ship their own software through Makenotwork.</p>
10
11 <!-- Create new app form -->
12 <details class="form-section proj-synckit-create">
13 <summary><h2 class="subsection-title">Create New App</h2></summary>
14 <div class="proj-synckit-create-body">
15
16 <form id="synckit-create-form" class="proj-synckit-create-form">
17 <div>
18 <label for="synckit-app-name" class="proj-synckit-label">App Name</label>
19 <input type="text" id="synckit-app-name" name="name" required
20 placeholder="e.g. GoingsOn Desktop"
21 class="proj-synckit-name-input input--sm w-220">
22 </div>
23 <button type="submit" class="btn">Create</button>
24 </form>
25 <div id="synckit-create-status"></div>
26 </div>
27 </details>
28
29 {% if apps.is_empty() %}
30 <p class="muted">No sync apps for this project yet. Create one above to get started.</p>
31 {% else %}
32 <div class="scroll-x">
33 <table class="data-table">
34 <thead>
35 <tr>
36 <th>Name</th>
37 <th title="Identifier used for over-the-air updates">Update Slug</th>
38 <th title="Secret key your app uses to authenticate with Cloud Sync">API Key</th>
39 <th>Status</th>
40 <th title="Number of devices currently syncing">Devices</th>
41 <th title="Recent sync activity">Log Entries</th>
42 <th>Created</th>
43 <th>Billing</th>
44 <th>Actions</th>
45 </tr>
46 </thead>
47 <tbody>
48 {% for app in apps %}
49 <tr>
50 <td>{{ app.name }}</td>
51 <td id="synckit-slug-cell-{{ app.id }}">
52 {% if let Some(s) = app.slug %}
53 <code class="proj-synckit-code">{{ s }}</code>
54 {% else %}
55 <span class="dimmed">-</span>
56 {% endif %}
57 <button class="btn-small btn-secondary proj-synckit-btn-tight"
58 data-slug="{{ app.slug.as_deref().unwrap_or_default() }}"
59 data-action="syncKitShowSlugFromBtn" data-arg="{{ app.id }}">Set</button>
60 </td>
61 <td>
62 <code id="synckit-key-display-{{ app.id }}" class="proj-synckit-code">{{ app.api_key_masked }}</code>
63 <span class="form-hint proj-synckit-hint-inline">(use Regenerate to get a new key)</span>
64 </td>
65 <td>
66 {% if app.is_active %}
67 <span class="proj-synckit-status-active">Active</span>
68 {% else %}
69 <span class="proj-synckit-status-inactive">Inactive</span>
70 {% endif %}
71 </td>
72 <td>{{ app.device_count }}</td>
73 <td>{{ app.log_entry_count }}</td>
74 <td>{{ app.created_at }}</td>
75 <td>{% include "partials/synckit_billing_panel.html" %}</td>
76 <td class="nowrap">
77 <button class="btn-small btn-secondary proj-synckit-btn-row"
78 data-action="syncKitRegenKey" data-arg="{{ app.id }}">Regenerate Key</button>
79 <button class="btn-small btn-danger proj-synckit-btn-row"
80 data-name="{{ app.name }}"
81 data-action="syncKitDeleteFromBtn" data-arg="{{ app.id }}">Delete</button>
82 </td>
83 </tr>
84 {% endfor %}
85 </tbody>
86 </table>
87 </div>
88 {% endif %}
89 </div>
90
91 <div id="tab-project-synckit-cfg" hidden data-project-id="{{ project_id }}"></div>
92 <script src="/static/tab-project-synckit.js?v=0623"></script>
93