<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License. 
-->
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
  <link rel="stylesheet" href="../style/style.css" type="text/css" />
    <link rel="alternate" title="general@incubator.apache.org Archives" type="application/atom+xml" href="http://mail-archives.apache.org/mod_mbox/incubator-general/?format=atom" />
    <title>Podling Web Site Guide - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row">
<div class="span12">
  <a href="http://www.apache.org/"><img src="http://incubator.apache.org/images/asf_logo_wide_small.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" width="62%"/></a>
</div>
<div class="span4">
<a href="http://incubator.apache.org/"><img src="../images/egg-logo2.png" alt="Apache Incubator" border="0"/></a>
</div>
</div>
  <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  
  <div class="row">
   <div class="span4">
    <form action="http://www.google.com/search" method="get">
     <input value="incubator.apache.org" name="sitesearch" type="hidden"/>
     <input size="20" name="q" id="query" type="text" value="search..."
      onclick="if(this.value == 'search...') {this.value = ''}"/>
     <input name="Search" value="Go" type="submit"/>
    </form>
          <div class="menuheader">General</div>
    <menu compact="compact">
          <li><a href="../index.html">Welcome</a></li> 
          <li><a href="../incubation/Process_Description.html">Incubation Overview</a></li> 
          <li><a href="../incubation/Incubation_Policy.html">Incubation Policy</a></li> 
          <li><a href="../guides/index.html">Incubation Guides</a></li> 
          <li><a href="../incubation/Roles_and_Responsibilities.html">Roles and Responsibilities</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li> 
          <li><a href="../whoweare.html">Who We Are</a></li> 
          <li><a href="../sitemap.html">Site Map</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects/index.html">Project List</a></li> 
          <li><a href="../clutch.html">Clutch Report</a></li> 
          <li><a href="../ip-clearance/index.html">IP Clearance</a></li> 
          <li><a href="../history/index.html">Incubator History</a></li> 
            </menu>
      <div class="menuheader">Entry Guides</div>
    <menu compact="compact">
          <li><a href="../guides/proposal.html">Proposal Guide</a></li> 
            </menu>
      <div class="menuheader">Podling Guides</div>
    <menu compact="compact">
          <li><a href="../guides/committer.html">Podling Committers</a></li> 
          <li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li> 
          <li><a href="../guides/mentor.html">Podling Mentor</a></li> 
          <li><a href="../guides/releasemanagement.html">Podling Releases</a></li> 
          <li><a href="../guides/branding.html">Podling Branding/Publicity</a></li> 
          <li><a href="../guides/sites.html">Podling Websites</a></li> 
          <li><a href="../guides/graduation.html">Graduation</a></li> 
          <li><a href="../guides/retirement.html">Retirement</a></li> 
            </menu>
      <div class="menuheader">Other Guides</div>
    <menu compact="compact">
          <li><a href="../guides/participation.html">Participation</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="../guides/pmc.html">Incubator PMC (IPMC)</a></li> 
          <li><a href="../guides/chair.html">IPMC Chair</a></li> 
          <li><a href="../guides/lists.html">Mailing Lists</a></li> 
          <li><a href="../guides/website.html">Incubator Website</a></li> 
            </menu>
      <div class="menuheader">ASF</div>
    <menu compact="compact">
          <li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li> 
          <li><a href="http://www.apache.org/dev/">Developer Documentation</a></li> 
          <li><a href="http://www.apache.org/foundation/">Foundation</a></li> 
          <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li> 
          <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> 
            </menu>
    <!-- start Ads Server -->
    <iframe src="http://www.apache.org/ads/buttonbar.html"
     style="border-width:0; float: left" frameborder="0" scrolling="no"
     width="135" height="265"></iframe>
    <!-- end Ads Server -->
   </div>
   
   <div class="span12">
            <h2><img src="../images/redarrow.gif" />Abstract</h2>
<div class="section-content">
<p>
Podlings need to build a community in Apache in order to be accepted
as part of the Apache Software Foundation. One of the tools used to build
a community is the web site.
        </p>
</div>
        <h2><img src="../images/redarrow.gif" />Podling Website Requirements</h2>
<div class="section-content">
<p>
Podlings are, by definition, not yet fully accepted as part of the
Apache Software Foundation. Therefore, they are subject to additional
constraints on their websites.  These policies MUST be adhered to
before Graduation is considered unless prior approval is obtained from
the Incubator PMC.
        </p>
<ul>
            <li>
The published site for each podling must conform to the guidelines in
<a href="../guides/branding.html">Podling Branding/Publicity</a>.
            </li>
            <li>
The sources for every podling site sources should be maintained in the podling's site SVN or git directory
            </li>
            <li>
The published site for each podling should conform to this URL space:
<code>http://podlingname.incubator.apache.org/</code>
            </li>
			<li>
The staging site for each podling should conform to this URL space:
<code>http://podlingname.staging.apache.org/</code>
		    </li>
            <li>
Every podling should maintain an incubation status file under:
<code>http://incubator.apache.org/projects/podlingname.html</code>
            </li>
            <li>
Eventual extra incubation documents should be filed under:
<code>http://incubator.apache.org/projects/podlingname/**</code>
           </li>
           <li>
The website lives in the following directory on people.apache.org:
           <code>/www/podlingname.apache.org/content/</code>
           </li>
        </ul>
</div>
        <h2><img src="../images/redarrow.gif" />Creating the Podling Website</h2>
<div class="section-content">
<h3>Creating A Good Podling Site</h3>
<div class="section-content">
<p>
  Apache Project Web Sites typically include several standard pages.
  Each page is formatted with a navigation bar on the left and a project
  standard header that includes the Incubator graphic.
            </p>
<p>
  The Web Site can be established during incubation, and migrated
  after incubation to a permanent place in the TLP home.
            </p>
<ul>
                <li>
  Project Home Page: the primary entry point to the site; contains 
  project description, news, invitation to join the project.
                </li><li>
  License Page: usually, the Apache License 2.0
                </li><li>
  Downloads: many projects in incubation will release code,
  and this page describes them and has links to the download pages
  that redirect to Apache Mirror sites.
                </li><li>
  Documentation: this page describes the project documentation,
  including javadoc for Java projects; guides, tutorials, and links to
  external documentation.
                </li><li>
  Committers: a list of current committers on the project.
                </li><li>
  Mailing Lists: there are several mailing lists that the
  community might be interested in, and this page contains mailto: links
  that allow easy subscription (and unsubscription) to any of them.
                </li><li>
  FAQ: frequently asked questions are answered here.
                </li><li>
  Road Map: if the project has a vision of future community
  or development activities, the road map is published here.
                </li><li>
  Source Code: links to the browsable source repository and
  svn commands to check out the sources.
                </li><li>
  Coding Standards: the coding standards for submitted code
  by the community, along with a description of how strict the project
  intends to be.
                </li><li>
  Issue Tracking: links to the JIRA or other issue tracking
  tool, possibly including frequently used filters for issue lists.
                </li><li>
  Dependencies: other projects that this project depends on.
                </li><li>
  favicon: the project's icon in a format suitable for a browser's address bar.  If absent, an Apache Feather will be displayed.
                </li></ul>
</div>
<h3 id='Tool'>Web Site Generation Tool</h3>
<div class="section-content">
<p>
  The choice of tool used to generate the web site is left to 
  the podling. If you already have a tool that you are comfortable
  with, you can continue to use it. If you do not, consider using
  the <a href="http://www.apache.org/dev/cmsref.html">Apache CMS</a>.
            </p>
<p>
  Regardless of which tool you use, the web site should be maintained
  in the svn repository, and include the site generation tool as a binary
  file. This simplifies the process of site generation and enables changes
  to the site to be made by any committer. The generated site should also
  be checked into svn. This allows the generated site to be relocated
  to any part of the Apache site after incubation is complete.
            </p>
<p>
  Since the site is independent of the code, it should exist high in
  the svn repository, e.g. parallel to the trunk of the source tree.
            </p>
</div>
<h3>Publishing The Website</h3>
<div class="section-content">
<p>
              <b>THIS IS VERY OUTDATED AND NEEDS FIXING</b><br />
The website is published by checking out the content from SVN into 
the directory <code>/www/incubator.apache.org/content/podlingname</code>
(old way) or <code>/www/podlingname.apache.org</code> (new way) on 
<code>people.apache.org</code>. The particular SVN module used to
store the website is a matter for the podling but it should be in SVN.
           </p>
<p>
People using Maven, Forrest, or any other tool still have
to address the SVN publishing requirement that the
infrastructure team has laid out. If that is done, then we
just run "svn update" in that directory to load the site from
SVN.
           </p>
<p>
The Mentors MUST add the information to the podling
incubation status file, to describe the SVN module and the
directory which holds the published site.
           </p>
</div>
<h3 id='create-website-using-wiki'>Using A Wiki To Create Documentation</h3>
<div class="section-content">
<p>
        Podlings may use a wiki to create documentation (including the website) providing that follow the 
        <a href="http://cwiki.apache.org/CWIKI/">guidelines</a>. In particular, care must be taken to 
        ensure that access to the wiki used to create documentation that may be included in the project
        release is restricted to only those with filed <a href="http://www.apache.org/licenses/">individual CLAs</a>. The PPMC MUST review all changes and ensure that
        trust is not abused.
        </p>
</div>
</div>
        <h2><img src="../images/redarrow.gif" />Main Incubator Website</h2>
<div class="section-content">
<p>Please read the <a href="website.html">Incubator Website guide</a>
      for more information about how the general Incubator site is laid out
      and how to edit/regenerate the top-level documentation and a project's
      status file.
      </p>
</div>
       </div>
   </div>
  
   <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span16 footer">
     Copyright &#169; 2009-2016 The Apache Software Foundation<br />
     Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
     Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
     
     
    </div>
  </div>
 </div> 
 </body>
</html>
